本节描述MySQL服务器如何使用字符集构造错误消息。有关错误消息的语言(而不是字符集)的信息,请参见第10.12节“设置错误消息语言”.有关配置错误日志记录的一般信息,请参见第5.4.2节“错误日志”.
服务器构造如下错误消息:
消息模板使用UTF-8 (
utf8mb3
).消息模板中的参数被替换为应用于特定错误发生的值:
像表或列名这样的标识符在内部使用UTF-8,因此它们被原样复制。
字符(非二进制)字符串值从其字符集转换为UTF-8。
二进制字符串值被复制为范围内的字节
0 x20
来0 x7e
,使用x \
对超出该范围的字节进行十六进制编码。例如,如果试图插入时发生重复键错误0 x41cf9f
成一个VARBINARY
唯一的列,产生的错误消息使用UTF-8和一些十六进制编码的字节:1键重复输入“A\xCF\x9F”
错误消息一旦构造好,就可以由服务器写入错误日志或发送给客户端:
如果服务器将错误消息写入错误日志,它将按照构造的方式以UTF-8写入,而不转换为另一个字符集。
如果服务器将错误消息发送给客户端程序,则服务器将其从UTF-8转换为
character_set_results
系统变量。如果character_set_results
值为零
或二进制
,不发生转换。如果变量值为,则不发生转换utf8mb3
或utf8mb4
因为这些字符集有一个包含消息构造中使用的所有UTF-8字符的集合。如果字符不能用
character_set_results
,在转换过程中可能会发生一些编码。编码使用Unicode编码点值:基本多语言平面(BMP)范围内的字符(
0 x0000
来0 xffff
)是用\
符号。nnnn
BMP范围以外的字符(
0 x10000
来0 x10ffff
)是用\ +
符号。nnnnnn
客户可以设置
character_set_results
控制它们接收错误消息的字符集。该变量可以直接设置,也可以通过诸如组名称
.有关character_set_results
,请参阅第10.4节“连接字符集和排序规则”.