공부/Tools

[MySQL] utf8mb4 (ut8mb4_0900 사용시 주의점)

aerhergag0 2024. 1. 21. 16:39

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 : 유니코드 기반 정확한 인코딩

 

https://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci

 

 


 

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 가 무난하나 상황에 맞게 사용할 것

 

참고 사이트 :

https://rastalion.me/mysql-8-0-1-%EB%B2%84%EC%A0%84%EB%B6%80%ED%84%B0-%EC%B1%84%ED%83%9D%EB%90%9C-utf8mb4_0900_ai_ci%EC%9D%98-%ED%95%9C%EA%B8%80-%EC%82%AC%EC%9A%A9%EC%97%90-%EB%8C%80%ED%95%9C-%EB%AC%B8%EC%A0%9C%EC%A0%90/

 

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