[mysql]collation
mysql 에서 collation 은 문자열을 비교하고 정렬하는데 사용되는 룰(rule) 의 집합입니다.
collation 은 아래와 같이 4가지 레벨에서 설정이 가능합니다.
- Server
- Database
- Table
- Column
Sever 레벨에서 설정은 서버의 모든 데이터베이스, 테이블에 동일하게 적용됩니다.
마찬가지 Database 레벨에서의 설정은 동일 데이터베이스이 모든 테이블에 동일하게 적용됩니다.
DBeaver 에서 데이터베이스에 설정된 collation 을 확인하는 방법은 아래와 같습니다.
예를 들어 아래 그림에서 cms_qa 데이터베이스를 클릭하면
아래와 같이 데이터베이스에 대한 상세정보 페이지가 나오고 기본적으로 설정되어 있는 collation 을 확인할 수 있습니다.
또는 아래와 같이 간단한 쿼리를 통해 디폴트 collation 과 해당 charcterset 에서 지원하는 collation 목록을 볼수 있습니다.
SHOW collation like 'utf8mb4%'
collation 은 각 문자에 가중치(weight) 를 부여합니다. 이 값은 각 문자를 비교하는데 사용합니다.
만약 두 문자가 가중치가 같다면 같은 문자, 다르면 다른 문자인것입니다.
아래 예제를 통해 간단히 실험해 보겠습니다.
쿼리를 간단히 설명드리면 collation 에 의해 부여된 문자의 가중치값을 보여주는 WEIGTH_STRING 함수를 이용하여 두문자의 가중치를 HEX 형태로 출력합니다.
실험 1. collation 으로 utf8mb4_general_ci 를 사용하여 문자 'A', 'B' 의 가중치 구하기
-쿼리
SELECT HEX(WEIGHT_STRING('A' COLLATE utf8mb4_general_ci)), HEX(WEIGHT_STRING('B' COLLATE utf8mb4_general_ci));
-결과
실험 2. utf8mb4_general_ci 에서 마지막 ci 는 case insensitive 즉 대소문자를 구별하지 않는 것을 의미합니다.
문자 'A' 와 'a' 의 가중치가 같은지 확인해봅니다.
-쿼리
SELECT HEX(WEIGHT_STRING('A' COLLATE utf8mb4_general_ci)), HEX(WEIGHT_STRING('a' COLLATE utf8mb4_general_ci));
-결과
실험 3. utf8mb4_bin 을 사용하여 문자 문자 'A' 와 'a' 의 가중치가 다른지 확인해 봅니다.
-쿼리
SELECT HEX(WEIGHT_STRING('A' COLLATE utf8mb4_bin)), HEX(WEIGHT_STRING('a' COLLATE utf8mb4_bin));
-결과
참고
https://dev.mysql.com/doc/refman/8.0/en/adding-collation.html
https://www.mysqltutorial.org/mysql-collation/