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

MySQL에서 대소문자를 구분하는 문자열 비교 방법 완벽 가이드

MySQL은 기본적으로 문자열 비교 시 대소문자를 구분하지 않습니다. 따라서 'Bob'과 'bob'을 동일한 값으로 취급합니다. 하지만 실제 개발 환경에서는 대소문자까지 정확하게 일치하는 데이터만 조회해야 하는 경우가 종종 발생합니다. 이럴 때 BINARY 키워드를 활용하면 간단하게 해결할 수 있습니다.

1. 예제용 테이블 생성하기

먼저 CREATE 명령어를 사용하여 테스트용 테이블을 생성합니다.

mysql> CREATE table InCaseSensDemo
-> (
-> Name varchar(100)
-> );
Query OK, 0 rows affected (0.50 sec)

2. 샘플 데이터 삽입하기

INSERT 명령어를 사용하여 대소문자가 다양하게 조합된 레코드들을 테이블에 삽입합니다.

mysql> INSERT into InCaseSensDemo values('JOhN');
Query OK, 1 row affected (0.11 sec)

mysql> INSERT into InCaseSensDemo values('bob');
Query OK, 1 row affected (0.21 sec)

mysql> INSERT into InCaseSensDemo values('BoB');
Query OK, 1 row affected (0.13 sec)

mysql> INSERT into InCaseSensDemo values('Bob');
Query OK, 1 row affected (0.18 sec)

3. 저장된 전체 데이터 확인하기

SELECT 명령어로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.

mysql> SELECT * from InCaseSensDemo;

실행 결과는 다음과 같습니다.

+------+
| Name |
+------+
| JOhN |
| bob |
| BoB |
| Bob |
+------+
4 rows in set (0.00 sec)

'bob', 'BoB', 'Bob'처럼 철자는 같지만 대소문자 조합이 서로 다른 값들이 함께 저장되어 있는 것을 확인할 수 있습니다.

4. BINARY 키워드로 대소문자 구분 비교하기

대소문자를 구분하여 문자열을 비교하려면 WHERE 절에서 BINARY 연산자를 사용합니다. 기본 문법은 다음과 같습니다.

SELECT * FROM yourTableName WHERE BINARY column_name = 'value';

BINARY 키워드는 문자열을 이진(binary) 값으로 변환하여 비교하기 때문에, 문자 하나하나의 대소문자까지 엄격하게 구분됩니다.

5. 실제 적용 예제

위 문법을 적용하여 정확히 'bob'과 일치하는(모두 소문자인) 레코드만 조회해 보겠습니다.

mysql> SELECT * FROM InCaseSensDemo WHERE BINARY Name = 'bob';

실행 결과는 다음과 같습니다.

+------+
| Name |
+------+
| bob |
+------+
1 row in set (0.00 sec)

결과를 보면 'BoB'나 'Bob'은 제외되고, 오직 소문자 'bob'과 정확히 일치하는 레코드 한 건만 반환된 것을 확인할 수 있습니다.

마무리 및 추가 팁

MySQL에서 대소문자 구분 비교가 필요할 때는 BINARY 연산자를 사용하면 됩니다. 다만 몇 가지 유의할 점이 있습니다.

첫째, 인덱스 성능 저하. BINARY를 사용하면 컬럼에 인덱스가 있더라도 제대로 활용되지 않아 대량의 데이터에서는 조회 속도가 느려질 수 있습니다.

둘째, 컬럼 정의 시 해결 가능. 컬럼을 생성할 때 처음부터 VARCHAR(100) BINARY처럼 선언하거나, COLLATE utf8mb4_bin과 같은 바이너리 콜레이션을 지정하면 별도의 BINARY 연산자 없이도 항상 대소문자를 구분하여 비교할 수 있습니다.

셋째, LIKE 절에서도 사용 가능. 부분 일치 검색 시에도 WHERE BINARY column_name LIKE '%bob%' 형태로 활용할 수 있습니다.

상황에 맞게 BINARY 연산자와 바이너리 콜레이션을 적절히 활용하시기 바랍니다.