Spec-Zone.ru › MySQL 5.7

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

Таблица 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/charset-unicode.html

Spec-Zone.ru

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