本节介绍 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 节,“连接字符集和排序规则”。