12.6 Набор символов сообщений об ошибках
В этом разделе описывается, как сервер MySQL использует наборы символов для построения сообщений об ошибках. Сведения о языке сообщений об ошибках (в отличие от набора символов) см. в разделе 12.12 «Настройка языка сообщений об ошибках». Общие сведения о настройке ведения журнала ошибок см. в разделе 7.4.2 «Журнал ошибок».
Набор символов для построения сообщения об ошибке
Сервер строит сообщения об ошибках следующим образом:
Шаблон сообщения использует UTF-8 (
utf8mb3).-
Параметры в шаблоне сообщения заменяются значениями, относящимися к конкретному случаю ошибки:
Идентификаторы, такие как имена таблиц или столбцов, используют UTF-8 внутри, поэтому они копируются как есть.
Значения строковых символов (не бинарных) преобразуются из их набора символов в UTF-8.
-
Значения бинарных строк копируются как есть для байтов в диапазоне
0x20до0x7E, а для байтов за пределами этого диапазона используется шестнадцатеричное кодирование\x. Например, если возникает ошибка дублирования ключа при попытке вставки0x41CF9Fв уникальный столбецVARBINARY, результирующее сообщение об ошибке использует UTF-8 с некоторыми байтами, закодированными в шестнадцатеричном формате:Duplicate entry 'A\xCF\x9F' for key 1
Набор символов для передачи сообщения об ошибке
После построения сообщение об ошибке может быть записано сервером в журнал ошибок или отправлено клиентам:
Если сервер записывает сообщение об ошибке в журнал ошибок, он записывает его в UTF-8, как построено, без преобразования в другой набор символов.
-
Если сервер отправляет сообщение об ошибке программе-клиенту, сервер преобразует его из UTF-8 в набор символов, указанный переменной системы
character_set_results. Если значениеcharacter_set_resultsимеет значениеNULLилиbinary, преобразование не происходит. Преобразование не происходит, если значение переменной также равноutf8mb3илиutf8mb4, так как эти наборы символов имеют репертуар, включающий все символы UTF-8, используемые при построении сообщений.Если символы не могут быть представлены в
character_set_results, во время преобразования может произойти некоторое кодирование. Кодирование использует значения кодов Unicode:Символы в диапазоне базовой многоязычной плоскости (BMP) (
0x0000до0xFFFF) записываются с использованием обозначения\.nnnnСимволы за пределами диапазона BMP (
0x10000до0x10FFFF) записываются с использованием обозначения\+.nnnnnn
Клиенты могут установить
character_set_resultsдля управления набором символов, в котором они получают сообщения об ошибках. Переменная может быть установлена непосредственно или косвенно, например, с помощьюSET NAMES. Дополнительные сведения оcharacter_set_resultsсм. в разделе 12.4 «Наборы символов и сортировки соединения».
© 2025 Oracle
Licensed under the GPLv2 License.