MySQL에서 정확한 문자열 값 검색하기
MySQL에서 기본 문자셋(utf8mb4의 일반 콜레이션)을 사용하면 문자열 비교 시 대소문자가 구분되지 않습니다. 따라서 'MySQL'과 'mysql'을 같은 값으로 취급하게 되죠. 대소문자까지 완전히 일치하는 정확한 문자열 값을 검색하려면 COLLATE 절에 바이너리 콜레이션인 utf8_bin을 지정해야 합니다.
실제 예제를 통해 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 테스트용 테이블을 생성합니다.
mysql> create table DemoTable1620
-> (
-> Subject varchar(20)
-> );
Query OK, 0 rows affected (0.42 sec)2단계: 데이터 삽입
INSERT 명령을 사용해 대소문자가 서로 다른 여러 레코드를 삽입합니다.
mysql> insert into DemoTable1620 values('mysql');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1620 values('MySql');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1620 values('mYSQL');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1620 values('MySQL');
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable1620 values('MYSQL');
Query OK, 1 row affected (0.20 sec)3단계: 전체 레코드 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1620;
실행 결과는 다음과 같습니다.
+---------+ | Subject | +---------+ | mysql | | MySql | | mYSQL | | MySQL | | MYSQL | +---------+ 5 rows in set (0.00 sec)
4단계: COLLATE를 이용한 정확한 검색
이제 COLLATE utf8_bin을 적용하여 'MySQL'과 철자 및 대소문자가 정확히 일치하는 값만 조회하는 쿼리입니다.
mysql> select * from DemoTable1620 where Subject collate utf8_bin = 'MySQL';
실행 결과는 다음과 같습니다.
+---------+ | Subject | +---------+ | MySQL | +---------+ 1 row in set (0.00 sec)
추가 팁
- utf8_bin: 각 문자를 이진값으로 비교하므로 대소문자를 엄격하게 구분합니다.
- BINARY 연산자:
WHERE BINARY Subject = 'MySQL'처럼BINARY키워드를 사용해도 동일한 결과를 얻을 수 있습니다. - 컬럼 정의 시 적용: 테이블 생성 시 해당 컬럼에
COLLATE utf8_bin을 직접 지정하면 매번 쿼리마다 콜레이션을 명시할 필요가 없습니다.
이처럼 COLLATE를 활용하면 MySQL에서도 대소문자를 포함한 정확한 문자열 매칭을 손쉽게 수행할 수 있습니다.