[MySQL] utf8mb4 (ut8mb4_0900 사용시 주의점)
mysql 사용중 여러 character set이 혼동되는 경우가 있다.
utf8mb4_unicode_ci
utf8mb4_unicode_520_ci
utf8mb4_general_ci
utf8mb4_bin
utf8mb4_0900_ai_ci
등..
- 0900 : 데이터 정렬 알고리즘 버전
- ai ( accent insensitivity ) : 악센트 구분 없음
- ci ( case insensitivity ) : 대소문자 구분 없음
bin collation
각 문자를 hex값 기준으로 판단하기 때문에, 알파벳 대소문자, 반각/전각, 이모지 등을 다른 값으로 판단한다.
SELECT
'😀' COLLATE utf8mb4_unicode_ci = '🤣' COLLATE utf8mb4_unicode_ci AS unicode_ci,
'😀' COLLATE utf8mb4_unicode_520_ci = '🤣' COLLATE utf8mb4_unicode_520_ci AS unicode_520_ci,
'😀' COLLATE utf8mb4_general_ci = '🤣' COLLATE utf8mb4_general_ci AS general_ci,
'😀' COLLATE utf8mb4_bin = '🤣' COLLATE utf8mb4_bin AS bin_result,
'😀' COLLATE utf8mb4_0900_ai_ci = '🤣' COLLATE utf8mb4_0900_ai_ci AS 0900_result;
unicode_520와 bin, 0900_ai_ci는 각 문자를 다른 값으로 인식하는 것 같다. (정확한 이유는 아직 모르겠다)
utf8mb4_general vs utf8mb4_unicode
utf8mb4_general : 일반적인 성능 약간 우세
utf8mb4_unicode : 유니코드 기반 정확한 인코딩
utf8mb4_0900 류를 사용시 주의점
가나다 , ㄱㅏ나다 , ㄱㅏㄴㅏㄷㅏ 같은 형태가 동일한 글자로 인식된다
한글 뿐만 아니라 일본의 히라가나, 가타가나 같은 경우도 같은 문자로 인식하기 때문에 글로벌 서비스인 경우 콜레이션 설정에 주의해야 한다.
SELECT
'가' COLLATE utf8mb4_unicode_ci = 'ㄱㅏ' COLLATE utf8mb4_unicode_ci AS unicode_ci,
'가' COLLATE utf8mb4_unicode_520_ci = 'ㄱㅏ' COLLATE utf8mb4_unicode_520_ci AS unicode_520_ci,
'가' COLLATE utf8mb4_general_ci = 'ㄱㅏ' COLLATE utf8mb4_general_ci AS general_ci,
'가' COLLATE utf8mb4_bin = 'ㄱㅏ' COLLATE utf8mb4_bin AS bin_result,
'가' COLLATE utf8mb4_0900_ai_ci = 'ㄱㅏ' COLLATE utf8mb4_0900_ai_ci AS 0900_result;
utf8mb4_0900이 알고리즘 성능이 가장 빨라 채택되는 경우가 있는데 유의하여 사용할것
일반적으로는 utf8mb4_unicode_520_ci 가 무난하나 상황에 맞게 사용할 것
참고 사이트 :
MySQL 8.0.1 utf8mb4_0900_ai_ci의 한글 사용에 대한 문제점 - RastaLion IT Blog
MySQL 8.0.1 버전부터 utf8mb4_0900_ai_ci를 기본값으로 적용했습니다. 기존의 5.x버전대의 MySQL을 사용해 오던 유저분들이라면 한글을 사용해야 하는 환경에서 대부분 utf8mb4_general_ci를 사용해왔을 겁니
rastalion.me
https://m.blog.naver.com/seuis398/220851196727
MySQL UTF8MB4 Charset의 Collation 선택 (대소문자, 전각/반각, emoji 문자 구분)
MySQL에서 collation으로 인해 흔히 겪게 되는 문제는 알파벳 대소...
blog.naver.com