“MySQL 字符集:错误消息字符集”的版本间差异
跳到导航
跳到搜索
(建立内容为“category:MySQL == 用于构造错误消息的字符集 == 服务器构造错误消息,如下所示: # 消息模板使用 UTF-8(utf8mb3)。 # 消息模板…”的新页面) |
无编辑摘要 |
||
第21行: | 第21行: | ||
Client 端可以设置“character_set_results”来控制接收错误消息的字符集。该变量可以直接设置,也可以通过诸如“SET NAMES”间接设置。 | Client 端可以设置“character_set_results”来控制接收错误消息的字符集。该变量可以直接设置,也可以通过诸如“SET NAMES”间接设置。 | ||
== 设置错误消息语言 == |
2021年3月28日 (日) 04:49的版本
用于构造错误消息的字符集
服务器构造错误消息,如下所示:
- 消息模板使用 UTF-8(utf8mb3)。
- 消息模板中的参数将替换为适用于特定错误发生的值:
- 表名或列名之类的标识符在内部使用 UTF-8,因此可以照原样复制。
- 字符(非二进制)字符串值从其字符集转换为 UTF-8.
- 对于 0x20 到 0x7E 范围内的字节,按原样复制二进制字符串值,对于超出该范围的字节,使用 \x 十六进制编码。例如,如果尝试将0x41CF9F插入到“VARBINARY”唯一列中时发生重复键错误,则产生的错误消息将使用 UTF-8,某些字节以十六进制编码:
Duplicate entry 'A\xC3\x9F' for key 1
用于处置错误消息的字符集
一旦构造了错误消息,服务器就可以将其写入错误日志或发送给 Client 端:
- 如果服务器将错误消息写入错误日志,则将其构造为 UTF-8 格式,而不转换为另一个字符集。
- 如果服务器将错误消息发送到 Client 端程序,则服务器会将错误消息从 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 表示法书写。
Client 端可以设置“character_set_results”来控制接收错误消息的字符集。该变量可以直接设置,也可以通过诸如“SET NAMES”间接设置。