본문 바로가기
DB,서버,OS 등

MySQL Collation 선택하기 utf8mb4_*

by bryan.oh 2024. 3. 30.
반응형

필요한 기능들?
- 한글
- 이모지 사용
- 대소문자 구분없는 비교

utf8mb4 인코딩에는 여러 가지 collation이 있으며, 이 중에서 대소문자를 구분하지 않는(collation 이름에 `_ci`가 포함된) 버전을 선택해야 합니다.

일반적인 두가지 선택지는 utf8mb4_general_ciutf8mb4_unicode_ci입니다.
대소문자를 구분하지 않으며 (Case Insensitive, CI), 다양한 언어의 문자를 비교할 때 좋은 성능을 제공합니다.
한글에 특화된 collation은 아니고, 모든 언어에 대해 괜찮은 성능을 제공하는 것을 목표로 합니다.

- utf8mb4_general_ci는 보다 빠른 성능을 제공하지만, 정확성이 다소 떨어질 수 있습니다. 일반적인 용도에는 적합할 수 있습니다.
- utf8mb4_unicode_ci는 Unicode 표준을 기반으로 보다 정확한 문자열 비교를 제공합니다. 이는 다양한 언어를 포함한 텍스트 처리에 적합하며, 한글을 포함한 여러 언어를 사용할 때 더 정확한 비교가 가능합니다.

따라서, 한글을 사용하면서 대소문자 구분 없이 비교하길 원한다면, 보다 정확한 문자 비교를 위해 utf8mb4_unicode_ci collation을 선택하는 것이 좋습니다. 그러나 성능이 중요한 경우, 더 빠른 utf8mb4_general_ci를 고려할 수 있습니다. MySQL의 최신 버전에서는 더 개선된 collation이 제공될 수 있으므로, 사용 중인 MySQL 버전의 문서를 확인하여 최적의 선택을 하는 것이 좋습니다.

결론은

정확한 문자열 비교는 utf8mb4_unicode_ci
위에 것과 비교하여 조금 더 빠른 성능을 원하면 utf8mb4_general_ci

그래서 utf8mb4_unicode_ci 이거로 선택.

 

< 참고 >

그 외 collation 특징

  • utf8mb4_bin: 바이너리 기반의 collation으로, 정확한 바이트 순서에 따른 비교를 수행하며 대소문자 구분을 합니다. 데이터의 바이트 값을 그대로 비교하기 때문에 성능은 매우 빠르지만, 사용자가 읽기에는 부적합할 수 있습니다.
  • utf8mb4_general_ci: 더 빠른 성능을 제공하지만, utf8mb4_unicode_ci보다는 문자 비교 정확도가 낮습니다. 대소문자 구분을 하지 않습니다.
  • utf8mb4_unicode_ci: Unicode 표준에 따라 문자를 비교하여 더 정확한 결과를 제공합니다. 다양한 언어와 문자에 대해 균형잡힌 성능을 제공하며 대소문자 구분을 하지 않습니다.
  • utf8mb4_unicode_520_ci: Unicode 5.2 표준을 기반으로 하며, utf8mb4_unicode_ci보다 더 최신의 문자 정렬 규칙을 사용하여 비교합니다. 이로 인해 더 정확한 문자열 비교를 기대할 수 있으며 대소문자 구분을 하지 않습니다.
  • utf8mb4_0900_ai_ci: MySQL 8.0 이상에서 사용 가능한, Unicode 9.0 기반의 알고리즘을 사용합니다. 이는 더 최신의 문자 정렬 규칙을 적용하여 보다 정확한 비교가 가능하며, 대소문자 구분을 하지 않습니다.
  • utf8mb4_0900_as_ci: utf8mb4_0900_ai_ci와 유사하지만, 더 정확한 억음 구분(악센트 구분)을 제공합니다. 이 collation은 억음이 있는 문자와 없는 문자를 구별하여 비교합니다.

 

환경에 따라, 

보안이 중요한 환경 : utf8mb4_bin
다국어를 지원 : utf8mb4_unicode_ci, utf8mb4_unicode_520_ci, utf8mb4_0900_ai_ci ...

728x90
반응형

댓글