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

MySQL에서 대소문자를 구분하는 문자열 비교를 수행하는 방법

MySQL은 기본적으로 문자열을 비교할 때 대소문자를 구분하지 않습니다. 하지만 이 동작은 변경할 수 있으며, 표현식 앞에 BINARY 키워드를 사용하면 대소문자를 구분하는(case-sensitive) 문자열 비교가 가능합니다.

BINARY 키워드는 문자의 철자 자체가 아니라 각 문자의 내부적인 ASCII 값을 기준으로 비교하도록 MySQL에 지시합니다. 따라서 'Ram'과 'RAM'은 같은 이름이 아니라 서로 다른 값으로 처리됩니다.

예제 데이터 확인

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

mysql> Select * from Employee;
+----+--------+--------+
| ID | Name   | Salary |
+----+--------+--------+
| 1  | Gaurav | 50000  |
| 2  | Rahul  | 20000  |
| 3  | Advik  | 25000  |
| 4  | Aarav  | 65000  |
| 5  | Ram    | 20000  |
| 6  | Mohan  | 30000  |
| 7  | Aryan  | NULL   |
| 8  | Vinay  | NULL   |
+----+--------+--------+
8 rows in set (0.09 sec)

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

아래 쿼리는 WHERE 절에서 BINARY 키워드를 사용하여 MySQL이 대소문자를 구분하는 문자열 비교를 수행하도록 강제합니다. 조회 조건으로 'Gaurav'와 'RAM'이라는 두 개의 값을 지정했습니다.

mysql> Select * from Employee WHERE BINARY Name IN ('Gaurav','RAM');
+----+--------+--------+
| ID | Name   | Salary |
+----+--------+--------+
| 1  | Gaurav | 50000  |
+----+--------+--------+
1 row in set (0.00 sec)

결과를 보면 테이블에는 소문자 형태인 'Ram'이라는 직원이 존재하지만, 쿼리에서는 대문자인 'RAM'을 조건으로 지정했기 때문에 해당 행은 조회되지 않았습니다. 오직 정확하게 일치하는 'Gaurav'만 결과로 반환된 것입니다.

정리

BINARY 키워드는 컬럼 이름 뒤에 붙여 사용하며(예: BINARY Name), 이를 적용하면 문자열 비교가 바이트 단위로 수행됩니다. 대소문자를 엄격하게 구분해야 하는 검색 조건이 필요할 때 유용하게 활용할 수 있지만, 인덱스 활용에 영향을 줄 수 있으므로 성능이 중요한 대량 데이터 환경에서는 신중하게 사용하는 것이 좋습니다.