## 10.6 错误信息字符集 本节介绍 MySQL 服务器如何使用字符集来构造错误消息。有关错误消息的语言(而不是字符集)的信息,请参阅[第 10.12 节,“设置错误消息语言”](error-message-language.html).有关配置错误日志记录的一般信息,请参阅[第 5.4.2 节,“错误日志”](error-log.html). - [错误消息构造的字符集](charset-errors.html#charset-errors-construction) - [错误消息处理的字符集](charset-errors.html#charset-errors-disposition) ### 错误消息构造的字符集 服务器构造错误消息如下: - 消息模板使用 UTF-8 (`utf8mb3`)。 - 消息模板中的参数被替换为适用于特定错误发生的值: - 标识符(例如表名或列名)在内部使用 UTF-8,因此它们按原样复制。 - 字符(非二进制)字符串值从其字符集转换为 UTF-8。 - 二进制字符串值按原样复制范围内的字节`0x20`到`0x7E`, 并使用`\x`超出该范围的字节的十六进制编码。例如,如果尝试插入时发生重复键错误`0x41CF9F`成一个[`变量`](binary-varbinary.html)唯一列,生成的错误消息使用 UTF-8 和一些字节十六进制编码: ``` Duplicate entry 'A\xCF\x9F' for key 1 ``` ### 错误消息处理的字符集 错误消息一旦构建,就可以由服务器写入错误日志或发送给客户端: - 如果服务器将错误消息写入错误日志,它将按照构造以 UTF-8 写入,而不转换为另一个字符集。 - 如果服务器将错误消息发送给客户端程序,则服务器将其从 UTF-8 转换为客户端指定的字符集[`字符集结果`](server-system-variables.html#sysvar_character_set_results)系统变量。如果[`字符集结果`](server-system-variables.html#sysvar_character_set_results)有一个值`空值`要么`二进制`,不发生转换。如果变量值为`utf8mb3`要么`utf8mb4`,或者,因为这些字符集具有包含消息构造中使用的所有 UTF-8 字符的曲目。 如果字符不能在[`字符集结果`](server-system-variables.html#sysvar_character_set_results),在转换过程中可能会发生一些编码。编码使用 Unicode 代码点值: - 基本多语言平面 (BMP) 范围内的字符 (`0x0000`到`0xFFFF`) 是用写的`\*`呸呸呸`*`符号。 - BMP 范围之外的字符 (`0x10000`到`0x10FFFF`) 是用写的`\+*`呸呸呸`*`符号。 客户可以设置[`字符集结果`](server-system-variables.html#sysvar_character_set_results)控制他们接收错误消息的字符集。变量可以直接设置,也可以通过以下方式间接设置[`设置名称`](set-names.html).有关更多信息[`字符集结果`](server-system-variables.html#sysvar_character_set_results), 看[第 10.4 节,“连接字符集和排序规则”](charset-connection.html).