프로그램

utf8_bin, utf8_unicode_ci, utf8_general 의 차이점.

(주)CKBcorp., 2012. 4. 12. 11:51
반응형


WINAPM 쓰다가, 디비 새로 만들건데 저런 선택지에서 헤매고 있었다.

그래서, 구글신에게 말씀을 여쭈었다.


이름에서 짐작할 수 있겟지만,

utf8_bin -> binary data 중심

utf8_general -> 속도 중심. 일반적으로 웹 호스팅 업체에서 선택

utf8_unicode_ci -> 문자열 중심. ordering 중심, sorting 중심. 



대부분의 경우는 "utf8_general" 를 선택해도 문제가 없을 것이라고 한다. 현재 업체에서 이렇게 쓰고 있기도 하고.

헌데, utf8_general 에는  unicode 중 일부 값이 안 들어있다네? 아마도 "unicode spec 상에는 정의되어 있지만, 실제로 쓰이지는 않는 reserved 공간 등" 에 대한 값을... 

unicode -> 놔둠

general- > 다른 값으로 사용


하는 것 같다.


결론 : 버킹검 

utf8_bin -> binary data( File/ image 등) 중심

utf8_general -> 속도 중심.

utf8_unicode_ci -> 문자열 중심. 


나라면 개발용은 unicode / 서비스 제공용은 general 쓰겠다. ㅋ


아래는 mysql 의 한글 설명이다. (출처 : 한글 mysql 사이트 )

---------------------------------------------------------------------------


10.9.1. 유니 코드 문자 셋

MySQL은 두 개의 유니 코드 문자 셋을 가지고 있다여러분은 이 문자 셋을 사용해서 약650개 언어로 된 텍스트를 저장할 수가 있다.

  • ucs2 (UCS-2 유니 코드콜레션:
    • ucs2_bin
    • ucs2_czech_ci
    • ucs2_danish_ci
    • ucs2_esperanto_ci
    • ucs2_estonian_ci
    • ucs2_general_ci (디폴트)
    • ucs2_hungarian_ci
    • ucs2_icelandic_ci
    • ucs2_latvian_ci
    • ucs2_lithuanian_ci
    • ucs2_persian_ci
    • ucs2_polish_ci
    • ucs2_roman_ci
    • ucs2_romanian_ci
    • ucs2_slovak_ci
    • ucs2_slovenian_ci
    • ucs2_spanish2_ci
    • ucs2_spanish_ci
    • ucs2_swedish_ci
    • ucs2_turkish_ci
    • ucs2_unicode_ci
  • utf8 (UTF-8 유니코드콜레션:
    • utf8_bin
    • utf8_czech_ci
    • utf8_danish_ci
    • utf8_esperanto_ci
    • utf8_estonian_ci
    • utf8_general_ci (디폴트)
    • utf8_hungarian_ci
    • utf8_icelandic_ci
    • utf8_latvian_ci
    • utf8_lithuanian_ci
    • utf8_persian_ci
    • utf8_polish_ci
    • utf8_roman_ci
    • utf8_romanian_ci
    • utf8_slovak_ci
    • utf8_slovenian_ci
    • utf8_spanish2_ci
    • utf8_spanish_ci
    • utf8_swedish_ci
    • utf8_turkish_ci
    • utf8_unicode_ci

ucs2_esperanto_ci utf8_esperanto_ci 콜레션은 MySQL 5.0.13에서 추가 되었고,ucs2_hungarian_ci 및 utf8_hungarian_ci 콜레션은 MySQL 5.0.19에서 추가 되었다.

MySQL은 http://www.unicode.org/reports/tr10/에서 설명되어 있는 유니코드 콜레션 알고리즘(UCA)을 사용해서 utf8_unicode_ci 콜레션을 구현한다이 콜레션은 버전-4.0.0 UCA웨이트 키 (weight keys)를 사용하고 있다:http://www.unicode.org/Public/UCA/4.0.0/allkeys-4.0.0.txt아래의 섹션은utf8_unicode_ci 사용에 대해서 설명을 하고 있지만ucs2_unicode_ci에 대해서도 적용할 수가 있다.

현재의 버전까지는utf8_unicode_ci 콜레션이 UCA (Unicode Collation Algoruthm)를 부분적으로만 지원하며몇몇 문자들은 아직까지 지원되지 않고 있다또한결합 마크(combining marks)는 전체적으로 지원하지 않는다.

utf8_unicode_ci의 가장 중요한 특징은 확장자 (expantion)을 지원한다는 것이다,하나의 문자가 여러 문자 조합과 동일하게 비교가 될 때예를 들면독일어와 몇몇 다른 언어에서는 ‘ß는 ss와 동일한 것이다.

utf8_general_ci는 확장자를 지원하지 않는 레가시 콜레션 (legacy collation)이다이것은 문자 간에 일대일 비교만을 실행한다이것은 utf8_general_ci 콜레션에 대한 비교가 보다 빠르다는 것을 의미하지만정확도는 utf8_unicode_ci 보다 다소 떨어진다.

예를 들면아래의 등식은 utf8_general_ci 및 utf8_unicode_ci에서 모두 적용된다.

Ä = A
Ö = O
Ü = U

위의 두 콜레션 간의 차이점은 아래의 것이 utf8_general_ci에 대해서도 적용된다는 것이다:

ß = s

반면에 아래의 것은 utf8_unicode_ci에만 적용된다:

ß = ss

MySQL은 utf8_unicode_ci를 사용하는 순서화 (ordering)가 특정 언어에 대해서 올바르게 동작하지 않는 경우에만 utf8 문자 셋에 대한 언어-관련 콜레션을 구현한다예를 들면,utf8_unicode_ci는 독일어 및 프랑스어에 대해서는 잘 동작을 하기 때문에이 두 언어에 대해서는 특별한 utf8 콜레션을 생성할 필요가 없게 된다



 


반응형