10.7. 유니코드 지원
MySQL 5.1은 유니 코드 데이터를 저장하기 위해서 두 가지의 문자 셋을 지원한다:
- ucs2, UCS-2 유니 코드 문자 셋.
- utf8, 유니 코드 문자 셋에 대한 UTF-8 인코딩 (encoding).
UCS-2 (binary Unicode representation)의 경우, 모든 문자는 가장 의미가 있는 바이트를 앞에 사용하여 2-바이트 유니 코드로 표현된다. 예를 들면: LATIN CAPITAL LETTER A는 코드 0x0041를 가지며, 이것은 2-바이트 시퀀스 형태로 저장된다: 0x00 0x41. CYRILLIC SMALL LETTER YERU (유니 코드 0x044B)는 2-바이트 시퀀스 형태로 저장된다: 0x04 0x4B.
현재까지는, UCS-2를 클라이언트 문자 셋 형태로 사용할 수 없기 때문에, SET NAMES 'ucs2' 는 구동을 하지 않는다.
UTF-8 문자 셋은 유니 코드 데이터를 저장하기 위한 또 다른 방식이다. 이것은 RFC 3629에 따라서 구현이 된다. UTF-8 문자 셋은 다양한 유니 코드 문자들이 서로 다른 길이의 바이트 시퀀스를 사용해서 인코딩 된다는 것이다:
- 기본적인 라틴 문자, 숫자, 그리고 구두점 (punctuation) 기호는 1 바이트를 사용한다.
- 대부분의 유럽 및 중동 스크립트 문자는 2-바이트 시퀀스를 사용한다: 라틴 문자의 확장형 (틸드(tilde), 마크론(macron), 어큐트(acute), 그레이브(grave) 그리고 기타 액센트를 사용하는 문자), Cyrillic, Greek, Armenian, Hebrew, Arabic, Syriac, 등등.
- 한국어, 중국어, 그리고 일본어 표의 문자는 3-바이트 시퀀스를 사용한다.
RFC 3629는 1~4바이트를 갖는 인코딩 시퀀스를 설명한다. 현재까지는, UTF-8을 지원하는 MySQL에는 4바이트 시퀀스가 포함되지 않고 있다.
Tip: UTF-8과 함께 스페이스를 저장하기 위해서는, CHAR 대신에 VARCHAR를 사용한다. 그렇지 않으면, MySQL은 CHAR CHARACTER SET utf8 컬럼 안에 있는 각각의 문자에 대해서 3 바이트를 지정 (reserve)하는데, 그 이유는 이것이 최대 가능 길이이기 때문이다. 예를 들면, MySQL 은 CHAR(10) CHARACTER SET utf8 컬럼에 대해서는 30 바이트를 반드시 지정 (reserve)해야 한다.