Spec-Zone.ru › MySQL 5.7

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

Spec-Zone.ru

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