本节介绍MySQL服务器如何使用字符集来构建错误消息。有关错误消息的语言(而不是字符集)的信息,请参见第10.12节“设置错误消息语言”。有关配置错误日志记录的一般信息,请参阅第5.4.2节“错误日志”。
服务器构造错误消息,如下所示:
消息模板使用UTF-8(
UTF8MB3.
)。消息模板中的参数被替换为适用于特定错误发生的值:
诸如表或列名之类的标识符在内部使用UTF-8,所以它们是原样复制的。
字符(非inary)字符串值从它们的字符集转换为UTF-8。
二进制字符串值将像复制范围内的字节一样复制
0x20.
至0x7e.
,并使用x \
在此范围之外的字节的十六进制编码。例如,如果尝试插入时出现重复键错误0x41cf9f.
成一个varbinary.
唯一列,生成的错误消息使用UTF-8,具有一些字节的十六进制编码:重复条目'a \ xcf \ x9f'用于键1
一旦构造,可以通过服务器写入错误日志或发送给客户端:
如果服务器将错误消息写入错误日志,则它将其写入UTF-8,如图所构造,无需转换为另一个字符集。
如果服务器将错误消息发送到客户端程序,则服务器将其从UTF-8转换为由指定的字符集
character_set_results.
系统变量。如果character_set_results.
有价值零
或二进制
,不会发生转换。如果变量值是,则不会发生转换UTF8MB3.
或UTF8MB4.
或者,因为这些字符集具有包含消息构造中使用的所有UTF-8字符的reptogreire。如果字符不能表示
character_set_results.
,在转换过程中可能会发生一些编码。编码使用Unicode编码点值:基本多语言平面(BMP)范围的字符(
0x0000.
至0xffff.
)是用的\
符号。nnnn
BMP范围之外的字符(
0x10000
至0x10ffff.
)是用的\ +
符号。nnnnnn.
客户可以设置
character_set_results.
控制他们接收错误消息的字符集。该变量可以直接设置,也可以通过诸如组名称
。有关的更多信息character_set_results.
, 看第10.4节,“连接字符集和排序规则”。