Spec-Zone.ru › MySQL 9.2

12.9 Поддержка Юникода

  • 12.9.1 Набор символов utf8mb4 (кодировка Юникода UTF-8 с 4 байтами)
  • 12.9.2 Набор символов utf8mb3 (кодировка Юникода UTF-8 с 3 байтами)
  • 12.9.3 Набор символов utf8 (устаревшее псевдоним для utf8mb3)
  • 12.9.4 Набор символов ucs2 (кодировка Юникода UCS-2)
  • 12.9.5 Набор символов utf16 (кодировка Юникода UTF-16)
  • 12.9.6 Набор символов utf16le (кодировка Юникода UTF-16LE)
  • 12.9.7 Набор символов utf32 (кодировка Юникода UTF-32)
  • 12.9.8 Преобразование между наборами символов Юникода с 3 и 4 байтами

Стандарт Юникод включает символы из базовой многоязычной плоскости (BMP) и дополнительные символы, которые находятся вне BMP. Этот раздел описывает поддержку Юникода в MySQL. Для получения информации о самом стандарте Юникод посетите веб-сайт Консорциума Юникод Unicode Consortium website.

Символы BMP имеют следующие характеристики:

  • Их значения кода находятся в диапазоне от 0 до 65535 (или U+0000 и U+FFFF).

  • Они могут быть закодированы с помощью кодировки переменной длины, используя 8, 16 или 24 бита (от 1 до 3 байт).

  • Они могут быть закодированы с помощью кодировки фиксированной длины, используя 16 бит (2 байта).

  • Они достаточны для почти всех символов основных языков.

Дополнительные символы находятся за пределами BMP:

  • Их значения кода находятся в диапазоне от U+10000 до U+10FFFF).

  • Поддержка Юникода для дополнительных символов требует наборов символов, которые выходят за пределы символов BMP и, следовательно, занимают больше места, чем символы BMP (до 4 байт на символ).

Метод UTF-8 (Unicode Transformation Format с 8-битными блоками) для кодирования данных Юникод реализован в соответствии с RFC 3629, который описывает последовательности кодирования, занимающие от одного до четырех байт. Суть UTF-8 заключается в том, что различные символы Юникода кодируются последовательностями байтов различной длины:

  • Буквы, цифры и знаки препинания основного латинского алфавита используют один байт.

  • Большинство букв европейских и ближневосточных письменностей умещаются в 2-байтовой последовательности: расширенные латинские буквы (с тильдой, макроном, острым, тяжёлым и другими ударениями), кириллица, греческий, армянский, еврейский, арабский, сирийский и другие.

  • Иероглифы корейского, китайского и японского языков используют 3-байтовые или 4-байтовые последовательности.

MySQL поддерживает следующие наборы символов Юникод:

  • utf8mb4: Кодировка UTF-8 набора символов Юникод с использованием от одного до четырёх байтов на символ.

  • utf8mb3: Кодировка UTF-8 набора символов Юникод с использованием от одного до трёх байтов на символ. Этот набор символов устарел и может быть удален в будущих версиях; используйте utf8mb4 вместо него.

  • utf8: Устаревший псевдоним для utf8mb3; используйте utf8mb4 вместо него.

    Примечание

    utf8 ожидается в будущей версии MySQL, чтобы стать псевдонимом для utf8mb4.

  • ucs2: Кодировка UCS-2 набора символов Юникод, использующая два байта на символ. Устаревший; ожидается, что поддержка этого набора символов будет удалена в будущей версии.

  • utf16: Кодировка UTF-16 для набора символов Юникод, использующая два или четыре байта на символ. Подобно ucs2, но с расширением для дополнительных символов.

  • utf16le: Кодировка UTF-16LE для набора символов Юникод. Подобно utf16, но с использованием little-endian, а не big-endian.

  • utf32: Кодировка UTF-32 для набора символов Юникод, использующая четыре байта на символ.

Примечание

Набор символов utf8mb3 устарел, и вы должны ожидать его удаления в будущей версии MySQL. Используйте utf8mb4 вместо него. utf8 в настоящее время является псевдонимом для utf8mb3, но теперь он устарел, и utf8 ожидается, что он впоследствии станет ссылкой на utf8mb4. MySQL 9.2 также отображает utf8mb3 вместо utf8 в столбцах таблиц Information Schema и в выводе SQL-заявлений SHOW.

Кроме того, следует учитывать, что сортировки, использующие префикс utf8_ в старых версиях MySQL, с тех пор были переименованы, используя префикс utf8mb3_.

Чтобы избежать неоднозначности в отношении значения utf8, рекомендуется явно указывать utf8mb4 для ссылок на набор символов.

Таблица 12.2, «Общие характеристики набора символов Юникод» обобщает общие характеристики наборов символов Юникод, поддерживаемых MySQL.

Таблица 12.2 Общие характеристики набора символов Юникод

Таблица 12.2 Общие характеристики набора символов Юникод
Набор символов Поддерживаемые символы Необходимое хранилище на символ
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 сравниваются как REPLACEMENT CHARACTER и преобразуются в '?' при преобразовании в набор символов Юникод, поддерживающий только символы BMP (utf8mb3 или ucs2).

Если вы используете наборы символов, поддерживающие дополнительные символы и, таким образом, «шире», чем только BMP utf8mb3 и ucs2 наборы символов, могут возникнуть потенциальные проблемы несовместимости для ваших приложений; см. Раздел 12.9.8, «Преобразование между наборами символов Юникода с 3 и 4 байтами». В этом разделе также описано, как преобразовать таблицы из (3-байтового) utf8mb3 в (4-байтовый) utf8mb4 и какие ограничения могут применяться при этом.

Аналогичный набор сортировок доступен для большинства наборов символов Юникод. Например, каждый имеет датскую сортировку, имена которых utf8mb4_danish_ci, utf8mb3_danish_ci (устарел), utf8_danish_ci (устарел), ucs2_danish_ci, utf16_danish_ci и utf32_danish_ci. Исключение составляет utf16le, у которого только две сортировки. Для получения информации о сортировках Юникода и их отличительных свойствах, включая свойства сортировки для дополнительных символов, см. Раздел 12.10.1, «Наборы символов Юникод».

Реализация UCS-2, UTF-16 и UTF-32 в MySQL хранит символы в порядке байтов big-endian и не использует метку порядка байтов (BOM) в начале значений. Другие системы баз данных могут использовать порядок байтов little-endian или метку BOM. В таких случаях при передаче данных между этими системами и MySQL необходимо выполнить преобразование значений. Реализация UTF-16LE использует порядок байтов little-endian.

MySQL не использует BOM для значений UTF-8.

Клиентские приложения, которые взаимодействуют с сервером с использованием Юникода, должны соответственно установить клиентский набор символов (например, выполнив операцию SET NAMES 'utf8mb4'). Некоторые наборы символов не могут быть использованы в качестве клиентского набора символов. Попытка использовать их с SET NAMES или SET CHARACTER SET приводит к ошибке. См. Недопустимые наборы символов клиента.

Следующие разделы содержат дополнительные сведения о наборах символов Юникода в MySQL.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/charset-unicode.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API