Character Set과 Collation에 대해 알아보겠습니다.
MySQL 5.5.3 이전까지는 전 세계 모든 언어를 21비트로, 3바이트가 조금 안 되게 저장할 수 있어 MySQL은 utf8을 3바이트 가변 자료형으로 설계했습니다.
그러나, 이모지와 같은 특수 문자열의 필요성이 증가하면서, MySQL 5.5.3 버전부터는 utf8의 가변 4바이트(utf8mb4) 문자열(Character)을 지원하기 시작했습니다.
여기서 언급된 Character Set은 문자 집합을 의미하며, 텍스트 데이터를 어떻게 인코딩(저장)할지에 대한 것입니다.
반면, Collation은 문자열의 정렬 규칙을 의미합니다.
utf8mb4 내에서도 문자열을 정렬하는 방식에 따라 다양한 종류가 있습니다.
예를 들어, 바이너리 값을 기준으로 하는 utf8mb4_bin과 사람이 보기 편한 정렬 방식을 제공하는 utf8mb4_unicode_ci 등이 있습니다.
동일한 데이터를 저장하더라도 어떤 데이터 셋을 선택하느냐에 따라 저장 공간과 쿼리 응답 속도가 달라질 수 있기 때문에, Character Set과 Collation의 선택이 중요합니다.
MySQL에서 Character set과 Collation을 확인하고 변경하는 방법에 대해 알아보겠습니다.
# character set 확인
SHOW VARIABLES LIKE 'character_set_server';
+----------------------+---------+
| Variable_name | Value |
+----------------------+---------+
| character_set_server | utf8mb4 |
+----------------------+---------+
1 row in set (0.01 sec)
# collation 확인
SHOW VARIABLES LIKE 'collation_server';
+------------------+--------------------+
| Variable_name | Value |
+------------------+--------------------+
| collation_server | utf8mb4_0900_ai_ci |
+------------------+--------------------+
1 row in set (0.00 sec)
다음은 변경하는 방법입니다.
ALTER DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
해당 쿼리는 mydatabase라는 데이터베이스 내의 character set과 cllate를 바꾸는 방법이고
상황에 맞게 변경하여 사용하시면 됩니다.
이상입니다!