Spec-Zone .ru
спецификации, руководства, описания, API

10.1.10. Поддержка Unicode

10.1.10.1. ucs2 Набор символов (UCS 2 Кодирования Unicode)
10.1.10.2. utf16 Набор символов (Кодирование Unicode UTF-16)
10.1.10.3. utf16le Набор символов (Кодирование Unicode UTF-16LE)
10.1.10.4. utf32 Набор символов (Кодирование Unicode UTF-32)
10.1.10.5. utf8 Набор символов (3-байтовое Кодирование Unicode UTF-8)
10.1.10.6. utf8mb3 "Набор символов" (Псевдоним для utf8)
10.1.10.7. utf8mb4 Набор символов (4-байтовый UTF-8 UnicodeEncoding)

Начальная реализация поддержки Unicode (в MySQL 4.1) включала два набора символов для того, чтобы хранить данные Unicode:

Эти два набора символов поддерживают символы от Основной Многоязычной Плоскости (BMP) Версии 3.0 Unicode. У символов BMP есть эти характеристики:

Символы, не поддерживаемые вышеупомянутыми наборами символов, включают дополнительные символы, которые лежат вне BMP. Символы вне BMP сравниваются как ЗАМЕНЯЮЩИЙ СИМВОЛ и преобразовывают в '?' когда преобразовано в набор символов Unicode.

В MySQL 5.7 поддержка Unicode включает дополнительные символы, который требует новых наборов символов, которые имеют более широкий диапазон и поэтому занимают больше места. Следующая таблица показывает краткое сравнение функции предыдущей и текущей поддержки Unicode.

Перед MySQL 5.5 MySQL 5.5 и
Весь Unicode 3.0 символа Весь Unicode 5.0 и 6.0 символов
Никакие дополнительные символы С дополнительными символами
ucs2 набор символов, BMP только Никакое изменение
utf8 набор символов для трех байтов, BMP только Никакое изменение
Новый utf8mb4 набор символов для четырех байтов, дополнительный BMPor
Новый utf16 набор символов, BMP или дополнительный
Новый utf16le набор символов, BMP или дополнительный
Новый utf32 набор символов, BMP или дополнительный

Эти изменения совместимы снизу вверх. Если Вы хотите использовать новые наборы символов, есть потенциальные проблемы несовместимости для Ваших приложений; см. Раздел 10.1.11, "Обновляя от До Текущей Поддержки Unicode". Тот раздел также описывает, как преобразовать таблицы из utf8 к (4 байта) utf8mb4 набор символов, и что ограничения могут применить при этом.

MySQL 5.7 поддерживает эти наборы символов Unicode:

ucs2 и utf8 поддерживайте символы BMP. utf8mb4, utf16, utf16le, и utf32 поддерживайте BMP и дополнительные символы.

Подобный набор сопоставлений доступен для большинства наборов символов Unicode. Например, у каждого есть датское сопоставление, имена которого ucs2_danish_ci, utf16_danish_ci, utf32_danish_ci, utf8_danish_ci, и utf8mb4_danish_ci. Исключение utf16le, у которого есть только два сопоставления. Все сопоставления Unicode перечисляются в Разделе 10.1.14.1, "Наборы символов Unicode", который также описывает свойства сопоставления для дополнительных символов.

Отметьте, что, хотя многие из дополнительных символов, прибывших с восточноазиатских языков, что добавляет MySQL 5.7, поддержка большего количества японских и китайских символов в наборах символов Unicode, не, поддерживают для новых японских и китайских наборов символов.

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

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

Клиентские приложения, которые должны связаться с сервером, используя Unicode, должны установить клиентский набор символов соответственно; например, выходя a SET NAMES 'utf8' оператор. ucs2, utf16, utf16le, и utf32 не может использоваться в качестве клиентского набора символов, что означает, что они не работают на SET NAMES или SET CHARACTER SET. (См. Раздел 10.1.4, "Наборы символов соединения и Сопоставления".)

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