MySQL의 LIKE 연산자는 기본적으로 대소문자를 구분하지 않습니다. 하지만 LIKE BINARY를 사용하면 대소문자를 엄격하게 구분하도록 강제할 수 있습니다.
LIKE BINARY 기본 문법
다음은 LIKE BINARY를 사용하여 MySQL LIKE를 대소문자 구분 방식으로 동작하게 만드는 기본 문법입니다.
SELECT yourColumnName LIKE BINARY 'anyStringValue' FROM yourTableName;
예제 테이블 생성하기
개념을 이해하기 위해 먼저 테이블을 생성해 보겠습니다. 아래는 테이블을 만드는 쿼리입니다.
mysql> CREATE TABLE LikeBinaryDemo
-> (
-> Name varchar(200)
-> );
Query OK, 0 rows affected (0.58 sec)이제 소문자로 된 레코드를 삽입합니다.
mysql> INSERT INTO LikeBinaryDemo VALUES('john');
Query OK, 1 row affected (0.12 sec)테이블에 저장된 레코드를 확인해 보겠습니다.
mysql> SELECT * FROM LikeBinaryDemo;
실행 결과는 다음과 같습니다.
+------+ | Name | +------+ | john | +------+ 1 row in set (0.00 sec)
케이스 1 − BINARY 사용 시
이제 LIKE BINARY를 사용하여 대소문자를 구분하도록 강제해 보겠습니다. 저장된 값 'john'을 대문자인 'JOHN'과 비교하면 결과로 0(일치하지 않음)이 반환됩니다.
mysql> SELECT Name LIKE BINARY 'JOHN' FROM LikeBinaryDemo;
실행 결과는 다음과 같습니다.
+-------------------------+ | Name like binary 'JOHN' | +-------------------------+ | 0 | +-------------------------+ 1 row in set (0.00 sec)
'john'과 'JOHN'은 대소문자가 다르기 때문에 BINARY 옵션 적용 시 일치하지 않는 것으로 판단됩니다.
케이스 2 − BINARY 미사용 시
반대로 BINARY를 사용하지 않으면 어떻게 되는지 살펴보겠습니다.
mysql> SELECT Name LIKE 'JOHN' FROM LikeBinaryDemo;
실행 결과는 다음과 같습니다.
+------------------+ | Name like 'JOHN' | +------------------+ | 1 | +------------------+ 1 row in set (0.00 sec)
BINARY 없이 비교하면 'john'과 'JOHN'이 같은 값으로 취급되어 결과가 1(일치함)로 반환됩니다. 이는 MySQL이 컬럼의 기본 콜레이션(collation)에 따라 대소문자를 구분하지 않고 비교하기 때문입니다.
정리
MySQL에서 LIKE 연산 시 대소문자를 엄격하게 구분하고 싶다면 LIKE BINARY를 활용하면 됩니다. 다만 참고로, 실무에서는 문자열 비교 시 콜레이션을 지정하는 방식(COLLATE utf8mb4_bin 등)을 사용하는 것이 성능 면에서 더 권장되기도 합니다. 상황에 맞게 적절한 방법을 선택하시기 바랍니다.