MySQL에서 대소문자까지 정확하게 일치하는 레코드를 조회하려면 WHERE 절 뒤에 BINARY 키워드를 사용하면 됩니다. 기본적으로 MySQL의 문자열 비교는 대소문자를 구분하지 않기 때문에, 정확한 일치 검색이 필요하다면 BINARY 연산자가 유용합니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
-> (
-> EmployeeCode varchar(100)
-> );
Query OK, 0 rows affected (0.64 sec)
insert 명령을 사용하여 테이블에 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable values('EMP-1122');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('emp-1122');
Query OK, 1 row affected (0.43 sec)
mysql> insert into DemoTable values('EMP-6756');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('EMP-8775');
Query OK, 1 row affected (0.16 sec)select 문을 사용하여 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------------+
| EmployeeCode |
+--------------+
| EMP-1122 |
| emp-1122 |
| EMP-6756 |
| EMP-8775 |
+--------------+
4 rows in set (0.00 sec)
테이블에는 'EMP-1122'와 'emp-1122'처럼 철자는 같지만 대소문자가 다른 두 개의 레코드가 함께 저장되어 있습니다. 이제 대소문자를 엄격하게 구분하여 정확히 일치하는 레코드만 조회하는 쿼리를 살펴보겠습니다.
mysql> select *from DemoTable WHERE BINARY EmployeeCode='EMP-1122';
출력 결과
BINARY 키워드를 적용하면 대소문자가 완전히 동일한 레코드만 반환됩니다.
+--------------+
| EmployeeCode |
+--------------+
| EMP-1122 |
+--------------+
1 row in set (0.00 sec)
결과를 보면 'emp-1122'는 제외되고 오직 'EMP-1122'와 정확히 일치하는 레코드 하나만 조회된 것을 확인할 수 있습니다. 이처럼 WHERE 절에서 BINARY를 사용하면 문자열을 바이트 단위로 비교하기 때문에 대소문자 구분 없이 저장된 데이터 중에서도 원하는 형태의 값만 정확하게 필터링할 수 있습니다.