Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  Character Sets, Collations, Unicode  /  Error Message Character Set

12.6 错误消息字符集

本节描述 MySQL 服务器如何使用字符集来构建错误消息。有关错误消息语言(而不是字符集)的信息,请参阅 第 12.12 节,“设置错误消息语言”。有关配置错误日志记录的常规信息,请参阅 第 7.4.2 节,“错误日志”

错误消息构建的字符集

服务器按照以下方式构建错误消息:

  • 消息模板使用 UTF-8 (utf8mb3)。

  • 消息模板中的参数将被替换为特定错误发生时的值:

    • 标识符,如表或列名,在内部使用 UTF-8,因此它们将被原样复制。

    • 字符(非二进制)字符串值将从其字符集转换为 UTF-8。

    • 二进制字符串值将被复制为范围 0x200x7E 的字节,并使用 \x 十六进制编码对范围外的字节进行编码。例如,如果尝试将 0x41CF9F 插入到唯一列中时发生重复键错误,结果错误消息将使用 UTF-8,其中一些字节将被十六进制编码:

      Duplicate entry 'A\xCF\x9F' for key 1

错误消息处置的字符集

一旦构建完成,错误消息可以由服务器写入错误日志或发送到客户端:

  • 如果服务器将错误消息写入错误日志,它将以构建时的 UTF-8 编写,不进行其他字符集的转换。

  • 如果服务器将错误消息发送到客户端程序,服务器将其从UTF-8转换为由character_set_results系统变量指定的字符集。如果character_set_results的值为NULLbinary,则不进行转换。如果变量值为utf8mb3utf8mb4,也不进行转换,因为这些字符集的 репертуар包括所有用于消息构造的UTF-8字符。

    如果字符不能在character_set_results中表示,一些编码可能会在转换期间发生。编码使用 Unicode 代码点值:

    • 基本多语言平面(BMP)范围内的字符(0x00000xFFFF)使用\nnnn表示法。

    • BMP 范围外的字符(0x100000x10FFFF)使用\+nnnnnn表示法。

    客户端可以设置character_set_results以控制它们接收错误消息的字符集。变量可以直接设置,也可以通过诸如SET NAMES等间接设置方式。有关character_set_results的更多信息,请参阅第 12.4 节,“连接字符集和排序”