Spec-Zone.ru › MySQL 8.4

12.9 Поддержка Unicode

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

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

Символы 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 с использованием от одного до трех байтов на символ. Этот набор символов устарел и будет удален в будущей версии; используйте utf8mb4 вместо него.

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

    Примечание

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

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

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

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

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

Примечание

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

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

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

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

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

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

Если вы используете наборы символов, поддерживающие дополнительные символы и, таким образом, «шире», чем только BMP utf8mb3 и ucs2 наборы символов, могут возникнуть проблемы с несовместимостью ваших приложений; см. Раздел 12.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 и их отличительных свойствах, включая свойства кодировок для дополнительных символов, см. Раздел 12.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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/charset-unicode.html

Spec-Zone.ru

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