MySQL에서 대문자 또는 소문자를 정확히 구분하여 특정 단어를 검색하려면 BINARY 키워드와 LIKE 연산자를 함께 사용하면 됩니다. 일반적인 LIKE 검색은 기본 콜레이션(collation)에 따라 대소문자를 구분하지 않지만, BINARY를 적용하면 문자열을 바이너리 값으로 비교하기 때문에 대소문자가 엄격하게 구분됩니다.
예제 테이블 생성
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
Header text
);
Query OK, 0 rows affected (1.09 sec)다음으로 insert 명령을 사용해 테이블에 레코드를 삽입합니다.
mysql> insert into DemoTable values('Programming tutorials on MySQL');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('programming in Java language');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Program in C language');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('pRograMMing in Python language');
Query OK, 1 row affected (0.41 sec)select 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------------------------------+ | Header | +--------------------------------+ | Programming tutorials on MySQL | | programming in Java language | | Program in C language | | pRograMMing in Python language | +--------------------------------+ 4 rows in set (0.00 sec)
소문자로 단어 검색하기
아래는 소문자 'programming'과 정확히 일치하는 레코드만 검색하는 쿼리입니다.
mysql> select * from DemoTable where binary Header like '%programming%';
실행 결과는 다음과 같습니다.
+------------------------------+ | Header | +------------------------------+ | programming in Java language | +------------------------------+ 1 row in set (0.05 sec)
'Programming', 'Program', 'pRograMMing'처럼 대소문자가 다른 레코드는 모두 제외되고, 순수하게 소문자로만 작성된 'programming in Java language' 한 건만 반환된 것을 확인할 수 있습니다.
대문자로 단어 검색하기
반대로 대문자가 포함된 형태로 검색하고 싶다면, LIKE 연산자 안에 원하는 대소문자 형태의 단어를 그대로 넣어주면 됩니다.
mysql> select * from DemoTable where binary Header like '%Programming%';
이 경우 'Programming tutorials on MySQL'만 결과로 반환됩니다.
참고 사항
BINARY 연산자는 컬럼 전체를 바이너리 문자열로 변환하여 비교하기 때문에 인덱스를 활용하지 못해 성능이 저하될 수 있습니다. 데이터 양이 많은 환경에서는 컬럼 생성 시 BINARY 속성을 지정하거나, 대소문자를 구분하는 콜레이션(예: utf8mb4_bin)을 사용하는 것이 더 효율적입니다.