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_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
콜레션을 생성할 필요가 없게 된다
'프로그램' 카테고리의 다른 글
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 |