utf-8 과 utf8mb4 에 대해서 알아보자.
해당 캐릭터셋은 현재 회사 DB가 euckr 인데...이것을 utf8로 변경하고자 확인하던 도중 많은 도움이 된 블로그가 있어서 정리하면서 같이 소개해 본다.
아래 블로그의 모든 내용을 조금씩 정리하면서 작성하였습니다.
가져온 블로그 : https://blog.lael.be/post/917
utf-8 문자 집한은 1~4 byte까지 저장이 가능하게 설계(가변 바이트)
-> 다국어가 지원이 되기 때문에 전세계 모든 언어를 저장이 가능하다
-> MySQL에서 utf8 을 3 Byte 가변 자료형으로 설계
하지만 최근에 나온 4 byte 문자열(Emoji 같은 것)을 utf8 에 저장하면 값이 손실되는 현상이 발생
(charset 은 utf8 / collation 는 utf8_general_ci)
4 Byte UTF-8 문자열
: MySQL에서 기존 설계대로 가변 4 Byte utf-8 문자열을 저장할 수 있는 자료형을 추가
-> 이것이 utf8mb4 로 지정 (MySQL 5.5.3 에서부터 추가)
- utf8 : Basic Plane.
- utf8mb4 : Basic Plane + Supplementary Plane.
추가로 utf8mb4 는 Emoji 문자열 지원
- 스마트폰에서 지원하는 문자들을 지원 (SMP - Supplementary Multilingual Plane)
(모바일 어플의 경우의 DB는 utf8mb4 로 설정하는 것이 좋을 듯 싶다)
아래 이미지 참고
즉, utf8 (가변 3바이트) utf8mb4 (가변 4바이트) 저장공간의 크기
Collaction
Collaction은 텍스트 데이터를 정렬 (Order by) 할 때 사용
text 계열 자료형에서만 사용할 수 있는 속성
utf8_bin (utf8mb4_bin)
Binary 저장 값 그대로 정렬
Hex 코드 (16진수)로 되어 있기에 해당 값으로 정렬
utf8_uniconde_ci (utf8mb4_unicode_ci)
한국어, 영어, 중국어, 일본어 사용환경에서는 general_ci 와 unicode_ci 의 결과가 동일
하지만 외국어 및 특수문자가 들어가는 경우 다름
utf8mb4 charset 에, utf8mb4_unicode_ci collation 사용 하는 것이 좋을 듯 싶다.
문제점
1) 다국어를 처리할 수 있는 UTF-8 이라는 저장방식이 있음. 원래 설계는 가변4바이트임.
2) 전세계 모든 언어문자를 다 카운트 해봤는데 3 바이트가 안됨.
3) MYSQL/MariaDB 에서는 공간절약+속도향상 을 위해서 utf8 을 가변3바이트로 설계함.
4) Emoji 같은 새로나온 문자가 UTF-8의 남은 영역을 사용하려함 (4바이트 영역).
5) MYSQL/MariaDB 에서 가변4바이트 자료형인 utf8mb4 를 추가함. (2010년 3월에).
'MySQL' 카테고리의 다른 글
[MySQL] isolation level 종류 및 특징 (0) | 2016.10.26 |
---|---|
[펌][MySQL] 왜 isolation-level Read-committed 에서 Binlog_format Mixed 이어도 모두 row format으로 binary 로그가 남을까? (0) | 2016.10.20 |
[MySQL] mysqllbinlog event_type: 19 (0) | 2016.10.20 |
[MySQL] Binary log 정리 (0) | 2016.10.18 |
[MySQL] Log 정리 (0) | 2016.10.05 |