백엔드 개발 블로그
[MySQL] utf8mb4_general_ci vs utf8mb4_unicode_ci vs utf8mb4_0900_ai_ci 본문
Database
[MySQL] utf8mb4_general_ci vs utf8mb4_unicode_ci vs utf8mb4_0900_ai_ci
베꺼 2024. 1. 5. 11:26Character Set
- `utf8`는 전체 유니코드를 지원하지 않는다. 한글자에 최대 3바이트를 할당한다.
- 이모지를 저장하고자 한다면 `utf8mb4`를 사용하자.
Collation
- Collation은 어떻게 문자열을 비교하고 정렬할지에 대한 규칙이다.
- `utf8mb4_bin` : 바이트 순서대로 정렬
- (ex: 'A' < 'B' < 'a' < 'b' )
- `utf8mb4_general_ci` : Case Insensitive, 대소문자 구분 없이 비교 및 정렬
- (ex: 'A' = 'a' < 'B' = 'b')
- `utf8mb4_unicode_ci` : general에 더해서 유럽쪽 문자 비교 로직이 추가됨
- (ex: 'ß' = 'ss')
- 유럽쪽 다국어 지원이 필요하지 않다면 굳이?
- `utf8mb4_0900_ai_ci` : MySQL 8 디폴트 값.
- 0900: 유니코드 collation algorithm 9.0.0 을 뜻함
- Accent Insensitive : 외국어에서 사용하는 악센트 기호가 있을 때 구분 없이 동일한 글자로 취급
- Case Insensitive : 대소문자 구분 없음
- 큰 문제가 있는데... "가" 와 "ㄱㅏ"를 동일한 문자열로 취급함
결론
한국에서는 웬만하면 utf8mb4, utf8mb4_general_ci를 사용하면 된다.
MySQL 8에서 유니코드가 디폴트가 되었다고 마음 놓지 말고 collation을 챙겨주자.
Comments