10.6 错误信息字符集

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

错误消息构造的字符集

服务器构造错误消息如下:

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

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

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

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

    • 0x20对于 到 范围内 的字节,二进制字符串值按原样复制0x7E,并对该范围外的字节使用\x 十六进制编码。例如,如果尝试插入唯一列时发生重复键错误0x41CF9FVARBINARY则生成的错误消息使用 UTF-8 和一些字节的十六进制编码:

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

错误消息处理字符集

一条错误信息,一旦构建,就可以由服务器写入错误日志或发送给客户端:

  • 如果服务器将错误消息写入错误日志,它会按构造将其写入 UTF-8,而不转换为另一个字符集。

  • 如果服务器将错误消息发送给客户端程序,服务器会将其从 UTF-8 转换为 character_set_results 系统变量指定的字符集。如果 character_set_results值为NULLor binary,则不会发生转换。如果变量值为 utf8mb3utf8mb4,则不会发生转换,因为这些字符集的指令集包括消息构造中使用的所有 UTF-8 字符。

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

    • 基本多语言平面 (BMP) 范围 (0x00000xFFFF) 中的字符是使用 符号书写的。 \nnnn

    • BMP 范围 ( 0x10000to 0x10FFFF) 之外的字符使用 符号书写。 \+nnnnnn

    客户端可以通过设置 character_set_results来控制接收错误信息的字符集。变量可以直接设置,也可以通过SET NAMES. 有关 的更多信息 character_set_results,请参阅 第 10.4 节,“连接字符集和排序规则”