Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 COLLATE로 정확한 문자열 값 검색하는 방법

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에서도 대소문자를 포함한 정확한 문자열 매칭을 손쉽게 수행할 수 있습니다.