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'
실행결과
검색결과 없음.
'DBMS > MySQL' 카테고리의 다른 글
[MySQL] 페이징 처리 limit 사용시 COUNT(*) 쉽게 하기 - SQL_CALC_FOUND_ROWS & FOUND_ROWS (0) | 2021.10.20 |
---|---|
[MySQL] smallint? tinyint? int의 종류와 범위 (0) | 2021.07.06 |