Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

백엔드 개발 블로그

[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:26

Character 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