티스토리 뷰

 

일반적인 CHAR, VARCHAR, TEXT 타입의 컬럼에 조건 비교를 하면 대소문자 구분을 하지 않는다.
조건에서 대소문자 구분이 필요한 경우 BINARY 함수를 사용하면 된다.

SELECT ID FROM MEMBER WHERE ID = 'ref';
SELECT ID FROM MEMBER WHERE BINARY(ID) = 'Ref';

 

MySQL 공식 문서에는 아래와 같이 언급하고 있다.

For nonbinary strings (CHAR, VARCHAR, TEXT), string searches use the collation of the comparison operands.
For binary strings (BINARY,VARBINARY, BLOB), comparisons use the numeric values of the bytes in the operands;
this means that for alphabetic characters, comparisons will be case sensitive.

 

만약 BINARY 함수를 사용하지 않고 대소문자를 구분하고 싶다면, BINARY 타입으로 테이블을 생성하면 된다.

CREATE TABLE `user` (
  `id` varbinary(20) DEFAULT NULL,
  `name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

이때 주의할 점은 BLOB으로 처리되어 일반적인 문자열로 변환할 때 또 다른 작업이 필요하다. 이럴 때는 아래와 같이 BINARY 옵션을 추가한다.

CREATE TABLE `user` (
  `id` varchar(20) binary DEFAULT NULL,
  `name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

이렇게 테이블을 생성하면 VARCHAR 타입이면서 대소문자를 구분할 수 있게 된다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함