10.9 Поддержка Unicode
- 10.9.1 Набор символов utf8mb4 (кодировка Unicode UTF-8 с 4 байтами)
- 10.9.2 Набор символов utf8mb3 (кодировка Unicode UTF-8 с 3 байтами)
- 10.9.3 Набор символов utf8 (псевдоним для utf8mb3)
- 10.9.4 Набор символов ucs2 (кодировка Unicode UCS-2)
- 10.9.5 Набор символов utf16 (кодировка Unicode UTF-16)
- 10.9.6 Набор символов utf16le (кодировка Unicode UTF-16LE)
- 10.9.7 Набор символов utf32 (кодировка Unicode UTF-32)
- 10.9.8 Преобразование между наборами символов Unicode с 3 и 4 байтами
Стандарт Unicode включает символы из базовой многоязычной плоскости (BMP) и дополнительные символы, которые находятся за пределами BMP. В этом разделе описывается поддержка Unicode в MySQL. Сведения о самом стандарте Unicode см. на веб-сайте Консорциума Unicode по адресу Unicode Consortium website.
Символы BMP обладают следующими характеристиками:
Их значения кодовых точек находятся в диапазоне от 0 до 65535 (или от
U+0000доU+FFFF).Они могут быть закодированы с переменной длиной с использованием 8, 16 или 24 битов (от 1 до 3 байтов).
Они могут быть закодированы с фиксированной длиной с использованием 16 битов (2 байта).
Их достаточно для большинства символов в основных языках.
Дополнительные символы находятся за пределами BMP:
Их значения кодовых точек находятся в диапазоне от
U+10000доU+10FFFF).Поддержка Unicode для дополнительных символов требует наборов символов, которые имеют диапазон за пределами символов BMP, и поэтому занимают больше места, чем символы BMP (до 4 байтов на символ).
Метод UTF-8 (Unicode Transformation Format с 8-битными единицами) для кодирования данных Unicode реализован в соответствии с RFC 3629, который описывает последовательности кодирования, занимающие от одного до четырёх байтов. Идея UTF-8 заключается в том, что различные символы Unicode кодируются с помощью последовательностей байтов различной длины:
Буквы, цифры и знаки препинания основного латинского алфавита используют один байт.
Большинство букв европейских и ближневосточных алфавитов помещаются в последовательность из 2 байтов: расширенные латинские буквы (с тильдой, макроном, острым, тяжёлым и другими ударениями), кириллица, греческий, армянский, иврит, арабский, сирийский и другие.
Идеограммы корейского, китайского и японского языков используют последовательности из 3 или 4 байтов.
MySQL поддерживает следующие наборы символов Unicode:
utf8mb4: кодирование UTF-8 набора символов Unicode с использованием от одного до четырёх байтов на символ.utf8mb3: кодирование UTF-8 набора символов Unicode с использованием от одного до трёх байтов на символ.utf8: псевдоним дляutf8mb3.ucs2: кодирование UCS-2 набора символов Unicode с использованием двух байтов на символ.utf16: кодирование UTF-16 для набора символов Unicode с использованием двух или четырёх байтов на символ. Подобноucs2, но с расширением для дополнительных символов.utf16le: кодирование UTF-16LE для набора символов Unicode. Подобноutf16, но с порядком байтов little-endian вместо big-endian.utf32: кодирование UTF-32 для набора символов Unicode с использованием четырёх байтов на символ.
Таблица 10.2, «Общие характеристики наборов символов Unicode», обобщает общие характеристики наборов символов Unicode, поддерживаемые MySQL.
Таблица 10.2 Общие характеристики наборов символов Unicode
| Набор символов | Поддерживаемые символы | Необходимое хранилище на символ |
|---|---|---|
utf8mb3, utf8
| Только BMP | 1, 2 или 3 байта |
ucs2 | Только BMP | 2 байта |
utf8mb4 | BMP и дополнительные | 1, 2, 3 или 4 байта |
utf16 | BMP и дополнительные | 2 или 4 байта |
utf16le | BMP и дополнительные | 2 или 4 байта |
utf32 | BMP и дополнительные | 4 байта |
Символы за пределами BMP сравниваются как ЗАМЕЩАЮЩИЙ СИМВОЛ и преобразуются в '?' при преобразовании в набор символов Unicode, поддерживающий только символы BMP (utf8mb3 или ucs2).
Если вы используете наборы символов, поддерживающие дополнительные символы, и, таким образом, «ширше», чем наборы символов только BMP, utf8mb3 и ucs2, могут возникнуть потенциальные проблемы совместимости для ваших приложений; см. Раздел 10.9.8, «Преобразование между наборами символов Unicode с 3-байтовыми и 4-байтовыми кодировками». В этом разделе также описано, как преобразовать таблицы из (3-байтового) utf8mb3 в (4-байтовый) utf8mb4 и какие ограничения могут при этом применяться.
Аналогичный набор сортировок доступен для большинства наборов символов Unicode. Например, каждый имеет датскую сортировку, имена которых являются utf8mb4_danish_ci, utf8mb3_danish_ci, utf8_danish_ci, ucs2_danish_ci, utf16_danish_ci и utf32_danish_ci. Исключением является utf16le, который имеет только две сортировки. Сведения о сортировках Unicode и их различающих свойствах, включая свойства сортировки для дополнительных символов, см. в Разделе 10.10.1, «Наборы символов Unicode».
Реализация MySQL для UCS-2, UTF-16 и UTF-32 хранит символы в порядке байтов big-endian и не использует маркер порядка байтов (BOM) в начале значений. Другие системы баз данных могут использовать порядок байтов little-endian или BOM. В таких случаях преобразование значений необходимо при передаче данных между этими системами и MySQL. Реализация UTF-16LE использует порядок байтов little-endian.
MySQL не использует BOM для значений UTF-8.
Клиентские приложения, взаимодействующие с сервером с использованием Unicode, должны соответствующим образом устанавливать клиентский набор символов (например, с помощью оператора SET NAMES 'utf8mb4'). Некоторые наборы символов не могут использоваться в качестве клиентского набора символов. Попытка использовать их с помощью SET
NAMES или SET CHARACTER
SET приводит к ошибке. См. Недопустимые клиентские наборы символов.
В следующих разделах даны дополнительные сведения о наборах символов Unicode в MySQL.
© 2025 Oracle
Licensed under the GPLv2 License.