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
| Набор символов | Поддерживаемые символы | Необходимое хранилище на символ |
|---|---|---|
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.