设置字符集错误的提示消息
本节介绍MySQL服务器如何使用字符集构造错误消息。有关错误消息的语言(而不是字符集)的信息,请参见“设置错误消息的语言”。有关配置错误日志记录的一般信息,请参见“MySQL服务器错误日志”。
- 用于错误消息构造的字符集
- 错误消息处理的字符集
设置字符集错误的提示消息
服务器构造错误消息,如下所示:
- 消息模板使用UTF-8(
utf8mb3
)。 消息模板中的参数将替换为适用于特定错误发生的值:
- 表或列名之类的标识符在内部使用UTF-8,因此可以照原样复制。
- 字符(非二进制)字符串值从其字符集转换为UTF-8。
二进制字符串值按原样复制
0x20
到到的范围内的字节0x7E
,并使用\x
十六进制编码表示超出该范围的字节。例如,如果对于一个试图插入发生重复键错误0x41CF9F
成VARBINARY
唯一的列,得到的错误消息使用UTF-8与一些字节的十六进制编码。Duplicate entry 'A\xC3\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
,请参见“连接字符集和校验规则”。- 基本多语言平面(BMP)范围(