MySQL에서 악센트(Accent)를 구분하여 검색하려면 utf8_bin 콜레이션(collation)을 활용하면 됩니다. 일반적인 콜레이션은 악센트가 있는 문자와 없는 문자를 동일하게 취급하지만, 바이너리(binary) 방식의 utf8_bin을 사용하면 문자를 정확히 구분하여 비교할 수 있습니다.
악센트 구분 검색 문법
악센트 구분 검색을 위한 기본 문법은 다음과 같습니다.
컬럼명 데이터타입 COLLATE utf8_bin;
예제 테이블 생성하기
위 문법을 실제로 적용해 보겠습니다. 먼저 테스트용 테이블을 생성합니다.
mysql> create table AccentSearchDemo
-> (
-> Id varchar(100) collate utf8_bin
-> );
Query OK, 0 rows affected (0.51 sec)
Id 컬럼에 collate utf8_bin 옵션이 지정되어 있어, 이후 해당 컬럼에서 수행되는 모든 비교 연산은 악센트와 대소문자를 엄격하게 구분하게 됩니다.
데이터 삽입하기
테스트를 위해 세 개의 레코드를 테이블에 삽입합니다.
mysql> insert into AccentSearchDemo values('John123');
Query OK, 1 row affected (0.31 sec)
mysql> insert into AccentSearchDemo values('Smith123');
Query OK, 1 row affected (0.15 sec)
mysql> insert into AccentSearchDemo values('123John');
Query OK, 1 row affected (0.11 sec)저장된 데이터 확인하기
SELECT 문을 사용하여 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select * from AccentSearchDemo;
실행 결과는 다음과 같습니다.
+----------+
| Id |
+----------+
| John123 |
| Smith123 |
| 123John |
+----------+
3 rows in set (0.00 sec)
참고 사항
utf8_bin 콜레이션은 악센트뿐만 아니라 대소문자까지 구분한다는 점에 유의해야 합니다. 예를 들어 'john123'으로 검색하면 'John123'은 매칭되지 않습니다. 만약 대소문자는 구분하지 않으면서 악센트만 구분하고 싶다면, MySQL 5.6 이상에서 제공하는 utf8_general_cs 또는 언어별 콜레이션(예: latin1_german2_ci 등)을 상황에 맞게 선택하는 것이 좋습니다. 또한 이미 생성된 테이블의 경우 ALTER TABLE ... MODIFY 구문을 통해 컬럼의 콜레이션을 변경할 수 있습니다.