Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот раздел описывает, как сервер использует наборы символов для того, чтобы создать сообщения об ошибках и возвратить их клиентам. Для получения информации о языке сообщений об ошибках (а не набор символов), см. Раздел 10.2, "Устанавливая сообщение об ошибке Язык".
В MySQL 5.7 сервер создает сообщения об ошибках, используя UTF-8 и возвращает их клиентам в наборе символов,
определенном character_set_results
системная переменная.
Сервер создает сообщения об ошибках следующим образом:
Шаблон сообщения использует UTF-8.
Параметры в шаблоне сообщения заменяются значениями, которые применяются к определенному ошибочному возникновению:
Идентификаторы, такие как имена таблиц или имена столбцов используют UTF-8 внутренне, таким образом, они копируются, как.
Символьные (недвоичные) строковые значения преобразовываются от их набора символов до UTF-8.
Значения двоичной строки копируются, как для байтов в диапазоне 0x20
к 0x7E
, и использование \x
шестнадцатеричное кодирование для байтов вне того диапазона.
Например, если двойная ключевая ошибка происходит для попытки вставить 0x41CF9F
в a VARBINARY
уникальный столбец, получающееся сообщение об
ошибке использует UTF-8 с некоторыми байтами, шестнадцатеричными закодированный:
Duplicate entry 'A\xC3\x9F' for key 1
Чтобы возвратить сообщение клиенту после того, как это было создано, сервер преобразовывает это от UTF-8 до
набора символов, определенного character_set_results
системная переменная. Если character_set_results
имеет значение NULL
или
binary
, никакое преобразование не происходит. Никакое преобразование не происходит,
если значение переменной utf8
, также, потому что это соответствует исходный набор
символов сообщения об ошибке.
Для символов, которые не могут быть представлены в character_set_results
, некоторое кодирование может произойти во время
преобразования. Кодирование использует значения кодовой точки Unicode:
Символы в Основной Многоязычной Плоскости (BMP) диапазон (0x0000
к 0xFFFF
) пишутся, используя \
нотация. nnnn
Символы вне диапазона BMP (0x01000
к 0x10FFFF
) пишутся, используя \+
нотация.nnnnnn
Клиенты могут установить character_set_results
управлять набором символов, в котором они получают
сообщения об ошибках. Переменная может быть установлена непосредственно, или косвенно средствами такой как SET
NAMES
. Для получения дополнительной информации о character_set_results
, см. Раздел
10.1.4, "Наборы символов соединения и Сопоставления".
Кодирование, которое происходит во время преобразования в character_set_results
прежде, чем возвратить сообщения об ошибках клиентам может
привести к различному контенту сообщения по сравнению с более ранними версиями (перед MySQL 5.5). Например, если
ошибка происходит для попытки отбросить названную таблицу ペ
(PE БУКВЫ KATAKANA) и
character_set_results
набор символов такой как latin1
это не содержит тот символ, у получающегося
сообщения, отправленного клиенту, есть закодированное имя таблицы:
ERROR 1051 (42S02): Unknown table '\30DA'
Перед MySQL 5.5 не кодируется имя:
ERROR 1051 (42S02): Unknown table 'ペ'