10.6 Набор символов сообщений об ошибках
В этом разделе описывается, как сервер MySQL использует наборы символов для построения сообщений об ошибках. Сведения о языке сообщений об ошибках (а не о наборе символов) см. в разделе 10.12 «Настройка языка сообщений об ошибках». Общие сведения о настройке регистрации ошибок см. в разделе 5.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, во время преобразования может произойти некоторое кодирование. Кодирование использует значения кодовых точек Юникода:Символы в диапазоне базовой многоязычной плоскости (BMP) (
0x0000до0xFFFF) записываются с использованием обозначения\.nnnnСимволы за пределами диапазона BMP (
0x10000до0x10FFFF) записываются с использованием обозначения\+.nnnnnn
Клиенты могут установить
character_set_resultsдля управления набором символов, в котором они получают сообщения об ошибках. Переменную можно установить непосредственно или косвенно, например, с помощьюSET NAMES. Дополнительные сведения оcharacter_set_resultsсм. в разделе 10.4 «Наборы символов и сортировки соединений».
© 2025 Oracle
Licensed under the GPLv2 License.