Spec-Zone.ru › MySQL 8.4

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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/charset-errors.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API