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 사이트 )
---------------------------------------------------------------------------
MySQL은 두 개의 유니 코드 문자 셋을 가지고 있다. 여러분은 이 문자 셋을 사용해서 약650개 언어로 된 텍스트를 저장할 수가 있다.
ucs2(UCS-2 유니 코드) 콜레션:ucs2_binucs2_czech_ciucs2_danish_ciucs2_esperanto_ciucs2_estonian_ciucs2_general_ci(디폴트)ucs2_hungarian_ciucs2_icelandic_ciucs2_latvian_ciucs2_lithuanian_ciucs2_persian_ciucs2_polish_ciucs2_roman_ciucs2_romanian_ciucs2_slovak_ciucs2_slovenian_ciucs2_spanish2_ciucs2_spanish_ciucs2_swedish_ciucs2_turkish_ciucs2_unicode_ciutf8(UTF-8 유니코드) 콜레션:utf8_binutf8_czech_ciutf8_danish_ciutf8_esperanto_ciutf8_estonian_ciutf8_general_ci(디폴트)utf8_hungarian_ciutf8_icelandic_ciutf8_latvian_ciutf8_lithuanian_ciutf8_persian_ciutf8_polish_ciutf8_roman_ciutf8_romanian_ciutf8_slovak_ciutf8_slovenian_ciutf8_spanish2_ciutf8_spanish_ciutf8_swedish_ciutf8_turkish_ciutf8_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에만 적용된다:
ß = ssMySQL은 utf8_unicode_ci를 사용하는 순서화 (ordering)가 특정 언어에 대해서 올바르게 동작하지 않는 경우에만 utf8 문자 셋에 대한 언어-관련 콜레션을 구현한다. 예를 들면,utf8_unicode_ci는 독일어 및 프랑스어에 대해서는 잘 동작을 하기 때문에, 이 두 언어에 대해서는 특별한 utf8 콜레션을 생성할 필요가 없게 된다
'프로그램' 카테고리의 다른 글
| php 에서 함수포인터 흉내내는 방법. (0) | 2012.04.30 |
|---|---|
| PHP : __("TEXT") 의 용법 (0) | 2012.04.17 |
| C 개발자가 보기에 어색한 PHP문법 1. ":" ( colon 콜론 ) (0) | 2012.04.09 |
| jre, jdk, jvm 차이점. (0) | 2012.04.06 |
| WSH - VBScript 에서 class 사용. (0) | 2012.04.01 |