10.1.10 Unicode 지원
- 10.1.10.1 ucs2 문자 세트 (UCS-2 Unicode 인코딩)
- 10.1.10.2 utf16 문자 세트 (UTF-16 Unicode 인코딩)
- 10.1.10.3 utf16le 문자 세트 (UTF-16LE Unicode 인코딩)
- 10.1.10.4 utf32 문자 세트 (UTF-32 Unicode 인코딩)
- 10.1.10.5 utf8 문자 세트 (3 바이트 UTF-8 Unicode 인코딩)
- 10.1.10.6 utf8mb3 문자 세트 (utf8의 별칭)
- 10.1.10.7 utf8mb4 문자 세트 (4 바이트 UTF-8 Unicode 인코딩)
Unicode 지원 (MySQL 4.1에서의) 초기 구현은 Unicode 데이터를 저장하기위한 두 개의 문자 집합이 포함되어있었습니다.
ucs2
. 문자 당 16 비트를 사용하는 Unicode 캐릭터 세트의 UCS-2 인코딩.utf8
. 문자마다 1에서 3 바이트를 사용하는 Unicode 캐릭터 세트의 UTF-8 인코딩.
이 두 문자 집합은 Unicode 버전 3.0 Basic Multilingual Plane (BMP)의 문자를 지원합니다. BMP 문자에는 다음의 3 가지 특성이 있습니다.
이러한 코드 값은 0에서 65535 (또는
U+0000
..U+FFFF
)입니다.이들은
ucs2
뿐만 아니라 16 비트 고정 단어로 인코딩 할 수 있습니다.이들은
utf8
와 마찬가지로, 8, 16 또는 24 비트 인코딩 할 수 있습니다.주요 언어의 거의 모든 문자는이 충분합니다.
위의 문자 세트에서 지원되지 않는 문자는 BMP의 범위 외에있는 보조 문자가 포함되어 있습니다. BMP의 범위 밖의 문자는 REPLACEMENT CHARACTER 간주되며 Unicode 문자 세트로 변환시에 '?'
로 변환됩니다.
MySQL 5.6에서의 Unicode 지원은 보조 문자가 포함되므로 범위가 더 넓기 때문에 더 많은 공간을 차지하는 새로운 캐릭터 세트가 필요합니다. 다음 표는 이전 Unicode 지원과 현재의 Unicode 지원 기능을 쉽게 비교하고 있습니다.
MySQL 5.5 이전 | MySQL 5.5 이상 |
---|---|
모든 Unicode 3.0 문자 | 모든 Unicode 5.0 및 6.0 문자 |
보조 문자 없음 | 보조 문자 수 |
ucs2 문자 세트, BMP 만 | 변경 없음 |
3 바이트까지의 utf8 문자 집합, BMP 만 | 변경 없음 |
4 바이트의 새로운 utf8mb4 문자 세트, BMP 또는 보조 | |
새로운 utf16 문자 세트, BMP 또는 보조 | |
새로운 utf16le 문자 세트, BMP 또는 보조 (5.6.1 이후) | |
새로운 utf32 문자 세트, BMP 또는 보조 |
이러한 변경은 호환성이 있습니다. 새로운 캐릭터 세트를 사용하는 경우 응용 프로그램의 비 호환성 문제가 발생할 수 있습니다. 섹션 10.1.11 "이전 Unicode 지원에서 현재 Unicode 지원으로 업그레이드" 를 참조하십시오. 또한이 섹션에서는 utf8
에서 (4 바이트) utf8mb4
문자 세트로 변환하는 방법과 그 때 적용될 수있는 제한 사항을 설명합니다.
MySQL 5.6는 다음 Unicode 문자 세트를 지원합니다.
ucs2
. 문자 당 16 비트를 사용하는 Unicode 캐릭터 세트의 UCS-2 인코딩.utf16
. Unicode 캐릭터 세트의 UTF-16 인코딩.ucs2
와 비슷하지만, 보조 문자 용 확장 기능이 있습니다.utf16le
. Unicode 캐릭터 세트의 UTF-16LE 인코딩.utf16
와 비슷하지만 빅 엔디안가 아닌 리틀 엔디안입니다.utf32
. 문자마다 32 비트를 사용하는 Unicode 캐릭터 세트의 UTF-32 인코딩.utf8
. 문자마다 1에서 3 바이트를 사용하는 Unicode 캐릭터 세트의 UTF-8 인코딩.utf8mb4
. 문자마다 1에서 4 바이트를 사용하는 Unicode 캐릭터 세트의 UTF-8 인코딩.
ucs2
및 utf8
은 BMP 문자를 지원합니다. utf8mb4
, utf16
, utf16le
및 utf32
은 BMP 및 보조 문자를 지원합니다.
유사한 일련의 데이터 정렬을 대부분의 Unicode 문자 세트로 사용할 수 있습니다. 예를 들어, 각각 덴마크어의 데이터 정렬이있어, 그 이름은 ucs2_danish_ci
, utf16_danish_ci
, utf32_danish_ci
, utf8_danish_ci
및 utf8mb4_danish_ci
입니다. 예외는 utf16le
이며, 2 개의 데이터 정렬 밖에 없습니다. 섹션 10.1.14.1 "Unicode 캐릭터 세트」 는 모든 Unicode 데이터 정렬이 나열되어 있으며, 보조 문자 데이터 정렬 특성에 대해 설명하고 있습니다.
많은 보조 문자는 동아시아 언어 것이지만, MySQL 5.6에서 추가 지원은 Unicode 문자 세트에 더 일본어와 중국어 문자에 대한 지원이며, 새로운 일본어 및 중국어 문자 세트 지원하지 않습니다.
UCS-2, UTF-16 및 UTF-32의 MySQL의 구현은 빅 endian의 바이트 순서로 문자를 저장하고 값의 선두에 바이트 순서 표시 (BOM)를 사용하지 않습니다. 다른 데이터베이스 시스템은 리틀 엔디안 바이트 순서 또는 BOM을 사용하는 것도 있습니다. 이러한 경우 이러한 시스템과 MySQL 간의 데이터를 전송할 때 값의 변환을 실행해야합니다. UTF-16LE 구현은 리틀 엔디안입니다.
MySQL은 UTF-8 값에 BOM을 사용하지 않습니다.
Unicode를 사용하여 서버와 통신해야하는 클라이언트 응용 프로그램은 예를 들어 SET NAMES 'utf8'
문을 실행하여 클라이언트 문자 집합을 적절하게 설정해야합니다. ucs2
, utf16
, utf16le
및 utf32
클라이언트 문자 집합으로 사용할 수 없습니다. 즉, 이들은 SET NAMES
또는 SET CHARACTER SET
작동하지 않습니다. ( 섹션 10.1.4 "연결 문자 집합 및 정렬 순서" 를 참조하십시오.)
다음 섹션에서는 MySQL의 Unicode 문자 세트에 대해 자세히 설명합니다.