본문 바로가기
스터디/Database

[DB] MySQL CharacterSet과 Collation

by zoodi 2022. 11. 12.
728x90

Character Set

character set은 텍스트 데이터를 어떤 방식으로 인코딩하여 저장할 것인지를 결정하는 값입니다. 

한글 인코딩을 위해 가장 널리 사용되는 인코딩 방식으로는 UTF-8과 EUC-KR이 존재하지만 show character set; 명령어를 통해서 지원하는 인코딩 목록을 확인 할 수 있습니다.

Collation

Collation은 정해진 character set에 의해 저장된 데이터들이 어떤 방식으로 정렬(order by) 될지를 결정하는 옵션입니다.

물론 직관적인 자료 (int나 date type)에서는 collation의 차이가 크게 의미 없습니다.

 

하지만 문자열을 정렬하는 방식에서는 차이가 있습니다. A와 가, 또는 A와 a 와 같은 문자열 정렬 방식을 설정하는 것은 설정값에 따라 달라집니다.

이러한 이유로 mysql은 collation 속성을 통해서 텍스트 데이터들의 정렬 방식을 결정합니다. show collation 명령어를 통해서 확인 가능합니다.

 

utf8mb4_bin

바이너리 값 그대로 정렬합니다. hex 코드 (16진수)로 A는 41, B는 42, a는 61, b는 62 이기 때문에 아래와 같은 순서로 정렬합니다.

  • A
  • B
  • a
  • b

utf8mb4_bin은 알파벳 대/소문자를 구분한다는 특징이 있습니다.


utf8mb4_general_ci

utf8_unicode_ci와 정렬 방법은 동일하지만, 정렬 속도 향상을 위해 일반적으로 잘 사용 되지 않는 문자들을 정렬 기준에서 제외한 방법입니다.

텍스트 정렬할 때 a 다음에 b가 나타나야한다는 생각으로 나온 정렬방식입니다. 일반적으로 널리 사용 되고 라틴계열 문자를 사람의 인식에 맞게 정렬합니다.

즉 바이너리 값을 한 번 가공하여 정렬합니다.

  • A
  • a
  • B
  • b

utf8_general_ci는 알파벳 대/소문자를 구분하지 않는다는 특징이 있습니다.

utf8mb4_unicode_ci

utf8_unicode_ci는 유니코드 표준을 기반으로 general_ci 보다 조금 더 사람에 맞게 정렬합니다. 전 세계에 존재하는 모든 문자 인코딩을 통합하려는 목적으로 제작 되었기 때문에 사용할 수 있는 거의 모든 언어들이 표현되어있으며 이를 기준으로 정렬하는 방식을 말합니다.

utf8mb4_general_ci와 거의 유사하지만 문자 정렬 순서에 약간 차이가 있고 전각/반각 문자를 구분하지 않습니다.

 

정리

utf8mb4_binutf8mb4_general_ciutf8mb4_unicode_ci

알파벳 대소문자 구분 O X X
전각/반각 문자 구분
(알파벳,숫자, 가타카나 등)
O O X
emoji 문자 구분 O X X

 


참고:

https://m.blog.naver.com/seuis398/220851196727

https://sshkim.tistory.com/128

728x90

댓글