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

MySQL BINARY 키워드란? 문자열 비교에서 대소문자를 구분하는 방법

MySQL BINARY 키워드의 역할

MySQL은 기본적으로 문자열 비교를 수행할 때 대소문자를 구분하지 않습니다(case-insensitive). 하지만 BINARY 키워드를 사용하면 MySQL이 대소문자를 구분하는(case-sensitive) 문자열 비교를 수행하도록 만들 수 있습니다.

그 이유는 BINARY 키워드가 MySQL에게 문자열의 각 문자를 글자 자체가 아닌 내부 ASCII 값(바이너리 값)을 기준으로 비교하도록 지시하기 때문입니다. 따라서 'YashPal'과 'YASHPAL'처럼 철자는 같지만 대소문자가 다른 문자열은 서로 다른 값으로 취급됩니다.

예제 데이터 준비

다음과 같은 데이터를 가진 'student_info' 테이블을 통해 BINARY 키워드의 동작을 살펴보겠습니다.

mysql> Select * from student_info;
+------+---------+------------+------------+
| id | Name | Address | Subject |
+------+---------+------------+------------+
| 101 | YashPal | Amritsar | History |
| 105 | Gaurav | Chandigarh | Literature |
| 125 | Raman | Shimla | Computers |
+------+---------+------------+------------+
3 rows in set (0.00 sec)

BINARY 키워드를 사용한 쿼리 실행

아래 쿼리는 WHERE 절에 BINARY 키워드를 사용하여 MySQL이 대소문자를 구분하는 문자열 비교를 수행하도록 강제합니다.

mysql> select * from student_info WHERE BINARY Name IN('YashPal', 'GAURAV');
+------+---------+----------+---------+
| id | Name | Address | Subject |
+------+---------+----------+---------+
| 101 | YashPal | Amritsar | History |
+------+---------+----------+---------+
1 row in set (0.08 sec)

결과 분석

결과 집합을 보면 조건에 'GAURAV'를 포함했음에도 불구하고 해당 행은 조회되지 않았습니다. 이는 실제 저장된 데이터가 'Gaurav'로 대소문자가 일치하지 않기 때문입니다. 반면 정확히 일치하는 'YashPal'만 결과로 반환되었습니다.

즉, BINARY 키워드를 사용한 후에는 MySQL이 대소문자를 엄격하게 구분하는 문자열 비교를 수행한다는 것을 명확히 확인할 수 있습니다.

참고 사항

BINARY 키워드는 편리하지만, 컬럼에 인덱스가 있더라도 바이너리 비교 방식으로 인해 인덱스 활용이 제한될 수 있어 대량의 데이터를 다룰 때는 성능에 영향을 줄 수 있습니다. 대소문자 구분 규칙을 지속적으로 적용해야 하는 경우에는 COLLATE 절을 사용해 컬럼의 콜레이션(collation) 자체를 변경하는 방법도 고려해 볼 수 있습니다.