Loading...
MySQL 9.5 Reference Manual 9.5의 12.9 Unicode Support의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
12.9.1 The utf8mb4 Character Set (4-Byte UTF-8 Unicode Encoding) 12.9.2 The utf8mb3 Character Set (3-Byte UTF-8 Unicode Encoding) 12.9.3 The utf8 Character Set (Deprecated alias for utf8mb3) 12.9.4 The ucs2 Character Set (UCS-2 Unicode Encoding) 12.9.5 The utf16 Character Set (UTF-16 Unicode Encoding) 12.9.6 The utf16le Character Set (UTF-16LE Unicode Encoding) 12.9.7 The utf32 Character Set (UTF-32 Unicode Encoding) 12.9.8 Converting Between 3-Byte and 4-Byte Unicode Character Sets
Unicode Standard에는 Basic Multilingual Plane (BMP)의 문자와 BMP 밖에 위치하는 supplementary 문자들이 포함됩니다. 이 섹션에서는 MySQL에서의 Unicode 지원에 대해 설명합니다. Unicode Standard 자체에 대한 정보는 Unicode Consortium website를 방문하십시오.
BMP 문자는 다음과 같은 특성을 가집니다:
코드 포인트 값이 0과 65535 (또는
U+0000과 U+FFFF) 사이입니다.
8, 16, 또는 24비트(1~3 byte)를 사용한 가변 길이 인코딩으로 인코딩될 수 있습니다.
16비트(2 byte)를 사용한 고정 길이 인코딩으로 인코딩될 수 있습니다.
주요 언어의 거의 모든 문자에 대해 충분합니다.
Supplementary 문자는 BMP 밖에 위치합니다:
코드 포인트 값이 U+10000
과 U+10FFFF 사이입니다.
Supplementary 문자를 위한 Unicode 지원은 BMP 문자의 범위를 넘어서는 문자 집합을 필요로 하며, 따라서 BMP 문자보다 더 많은 공간(문자당 최대 4 byte)을 사용합니다.
UTF-8 (Unicode Transformation Format with 8-bit units) 방식의 Unicode 데이터 인코딩은 RFC 3629에 따라 구현되며, 이는 1~4 byte를 사용하는 인코딩 시퀀스를 설명합니다. UTF-8의 개념은 다양한 Unicode 문자가 서로 다른 길이의 byte 시퀀스를 사용해 인코딩된다는 것입니다:
Basic Latin 문자, 숫자, 문장 부호는 1 byte를 사용합니다.
대부분의 유럽 및 중동 스크립트 문자는 2-byte 시퀀스에 들어갑니다: 확장 Latin 문자(틸드, 마크론, acute, grave 및 기타 악센트가 있는 문자), Cyrillic, Greek, Armenian, Hebrew, Arabic, Syriac 등.
한국어, 중국어, 일본어의 표의문자는 3-byte 또는 4-byte 시퀀스를 사용합니다.
MySQL은 다음과 같은 Unicode 문자 집합을 지원합니다:
utf8mb4: 문자당 1~4 byte를 사용하는 Unicode
문자 집합의 UTF-8 인코딩입니다.
utf8mb3: 문자당 1~3 byte를 사용하는 Unicode
문자 집합의 UTF-8 인코딩입니다. 이
문자 집합은 deprecated 되었으며 향후
릴리스에서 제거될 수 있습니다. 대신
utf8mb4를 사용하십시오.
utf8: utf8mb3의 deprecated alias입니다. 대신
utf8mb4를 사용하십시오.
참고
utf8은 향후 버전의 MySQL에서
utf8mb4의 alias가 될 것으로 예상됩니다.
ucs2: 문자당 2 byte를 사용하는 Unicode
문자 집합의 UCS-2 인코딩입니다. Deprecated 되었으며,
향후 릴리스에서 이 문자 집합에 대한 지원이 제거될 수 있습니다.
utf16: 문자당 2 또는 4 byte를 사용하는 Unicode
문자 집합의 UTF-16 인코딩입니다. Supplementary 문자를 위한 확장이 있다는 점을 제외하면
ucs2와 유사합니다.
utf16le: Unicode 문자 집합을 위한 UTF-16LE 인코딩입니다.
utf16과 유사하지만 big-endian이 아닌 little-endian입니다.
utf32: 문자당 4 byte를 사용하는 Unicode
문자 집합의 UTF-32 인코딩입니다.
참고
utf8mb3 문자 집합은 deprecated 되었으며
향후 MySQL 릴리스에서 제거될 것으로 예상해야 합니다.
대신 utf8mb4를 사용하십시오.
utf8은 현재
utf8mb3의 alias이지만, 이러한 alias는 이제 deprecated 되었으며,
이후에는 utf8이
utf8mb4를 가리키게 될 것으로 예상됩니다. MySQL 9.5는
Information Schema 테이블의 컬럼과 SQL SHOW
문장의 출력에서 utf8 대신
utf8mb3를 표시하기도 합니다.
추가로, MySQL의 이전 릴리스에서 utf8_ prefix를 사용하던 collation들은
이후 utf8mb3_ prefix를 사용하도록 이름이 변경되었음을 알아두어야 합니다.
utf8의 의미에 대한 모호함을 피하기 위해,
문자 집합을 참조할 때 utf8mb4를 명시적으로 지정하는 것을 고려하십시오.
Table 12.2, “Unicode Character Set General Characteristics”는 MySQL이 지원하는 Unicode 문자 집합의 일반적인 특성을 요약합니다.
Table 12.2 Unicode Character Set General Characteristics
| Character Set | Supported Characters | Required Storage Per Character |
|---|---|---|
utf8mb3, utf8 (deprecated) | BMP only | 1, 2, or 3 bytes |
ucs2 | BMP only | 2 bytes |
utf8mb4 | BMP and supplementary | 1, 2, 3, or 4 bytes |
utf16 | BMP and supplementary | 2 or 4 bytes |
utf16le | BMP and supplementary | 2 or 4 bytes |
utf32 | BMP and supplementary | 4 bytes |
BMP 밖의 문자는 REPLACEMENT CHARACTER로 비교되며,
Unicode 문자 집합 중 BMP 문자만 지원하는
(utf8mb3 또는
ucs2) 문자 집합으로 변환될 때는 '?'로 변환됩니다.
Supplementary 문자를 지원하는, 즉 BMP 전용인
utf8mb3 및 ucs2 문자
집합보다 “더 넓은” 문자 집합을 사용하는 경우,
애플리케이션에 잠재적인 호환성 문제가 발생할 수 있습니다. 이에 대해서는
Section 12.9.8, “Converting Between 3-Byte and 4-Byte Unicode Character Sets”을 참조하십시오.
해당 섹션에서는 (3-byte) utf8mb3에서 (4-byte)
utf8mb4로 테이블을 변환하는 방법과,
그 과정에서 적용될 수 있는 제약 사항에 대해서도 설명합니다.
대부분의 Unicode 문자 집합에 대해서는 이와 유사한 collation 집합이 제공됩니다. 예를 들어, 각 문자 집합에는 Danish collation이 있으며,
그 이름은 utf8mb4_danish_ci,
utf8mb3_danish_ci (deprecated),
utf8_danish_ci (deprecated),
ucs2_danish_ci,
utf16_danish_ci,
utf32_danish_ci입니다. 예외는
utf16le로, 이 문자 집합에는 두 개의 collation만 있습니다. Supplementary 문자에 대한 collation 속성을 포함하여, Unicode collation 및 그 차별화 속성에 대한 정보는
Section 12.10.1, “Unicode Character Sets”을 참조하십시오.
MySQL의 UCS-2, UTF-16, UTF-32 구현은 문자를 big-endian byte order로 저장하며 값의 시작 부분에 byte order mark (BOM)를 사용하지 않습니다. 다른 데이터베이스 시스템은 little-endian byte order 또는 BOM을 사용할 수 있습니다. 이러한 경우에는 해당 시스템과 MySQL 간에 데이터를 전송할 때 값의 변환이 수행되어야 합니다. UTF-16LE의 구현은 little-endian입니다.
MySQL은 UTF-8 값에 대해 BOM을 사용하지 않습니다.
서버와 Unicode로 통신하는 클라이언트 애플리케이션은
클라이언트 문자 집합을 이에 맞게 설정해야 합니다(예를 들어,
SET NAMES 'utf8mb4' 문장을 실행하여). 일부
문자 집합은 클라이언트 문자 집합으로 사용할 수 없습니다.
이들을 SET NAMES 또는 SET CHARACTER SET과 함께 사용하려고 하면 오류가 발생합니다. 자세한 내용은
Impermissible Client Character Sets을 참조하십시오.
다음 섹션에서는 MySQL의 Unicode 문자 집합에 대한 추가 세부 정보를 제공합니다.
12.8.7 Using Collation in INFORMATION_SCHEMA Searches
12.9.1 The utf8mb4 Character Set (4-Byte UTF-8 Unicode Encoding)