Sky Archive

DBMS/MySQL

[MySQL] 대소문자 구분하여 비교 및 검색 (BINARY)

Zero Line 2021. 7. 1. 22:39

MySQL은 비교나 검색을 수행할 때
기본적으로 대소문자 구분 없이 비교 및 검색이 가능하다.

이에 따라 아이디나 패스워드 등 대소문자가 엄격히 구분되어야 하는 경우
서로 다른 값으로 인식되도록 처리가 필요하다.

예시 1 - SELECT절에서 대소문자 비교

SELECT 'X' = 'x';

실행결과 - 대문자와 소문자의 비교 결과가 true이다.

1

예시 2 - WHERE절에서 대소문자 비교

SELECT 'ID' AS ID FROM MEMBER WHERE ID = 'id'

실행결과 - 소문자로 검색해도 검색결과가 도출된다.

ID

 

해결 방안 - BINARY

BINARY 문자열 타입은
문자가 아닌 바이트를 기준으로 비교나 검색을 할 수 있다.

방법 1. 테이블 생성 시 해당 필드에 BINARY 타입 사용

MySQL에서 지원하는 BINARY타입에는 BINARY, VARBINARY, BLOB이 있다.

예시 - 테이블 생성 시 해당 필드 BINARY 타입으로 생성

CREATE TABLE `MEMBER` ( `ID` varbinary(10) NOT NULL, PRIMARY KEY (`ID`) )

방법 2. 테이블 생성 시 해당 필드에 BINARY 옵션 적용

예시 - 테이블 생성 시 해당 필드에 BINARY 옵션 추가

CREATE TABLE `MEMBER` ( `ID` varchar(10) binary NOT NULL, PRIMARY KEY (`ID`) )

방법 3. BINARY 연산자 이용

예시 - 쿼리 작성 시 SELECT절에서 비교

SELECT BINARY 'ID' = 'id'

실행결과 - 대문자와 소문자의 비교 결과가 false이다.

0

방법 4. BINARY 함수 이용

예시 - 쿼리 작성 시 WHERE절에서 비교

SELECT 'ID' AS ID FROM MEMBER WHERE BINARY(ID) = 'id'

실행결과

검색결과 없음.