12.15 字符集配置
MySQL 服务器有一个编译好的默认字符集和排序规则。要更改这些默认值,使用--character-set-server
和 --collation-server
选项启动服务器。见第7.1.7节,“服务器命令选项”。排序规则必须是默认字符集的合法排序规则。要确定每个字符集可用的排序规则,使用SHOW COLLATION
语句或查询INFORMATION_SCHEMA COLLATIONS
表。
如果您尝试使用未编译到二进制中的字符集,您可能会遇到以下问题:
-
如果您的程序使用错误的路径来确定字符集存储位置(通常是 MySQL 安装目录下的
share/mysql/charsets
或share/charsets
目录),可以通过使用--character-sets-dir 选项来解决。例如,为了指定 MySQL 客户端程序使用的目录,在选项文件的[client]
组中列出该目录。以下示例展示了 Unix 或 Windows 的设置方式:[client] character-sets-dir=/usr/local/mysql/share/mysql/charsets [client] character-sets-dir="C:/Program Files/MySQL/MySQL Server 8.4/share/charsets"
-
如果字符集是一个不能动态加载的复杂字符集,那么你必须重新编译程序以支持该字符集。
对于 Unicode 字符集,你可以使用 LDML 记法定义排序规则,不需要重新编译。见第 12.14.4 节,“ Unicode 字符集添加 UCA 排序规则”。
-
如果字符集是一个动态字符集,但你没有该字符集的配置文件,那么你应该从新的 MySQL 发布版本中安装该字符集的配置文件。
-
如果你的字符集索引文件 (
Index.xml
) 不包含该字符集的名称,你的程序将显示错误信息:Character set 'charset_name' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file
解决这个问题,你可以选择获取新的索引文件或手动添加缺少的字符集名称到当前文件中。
你可以强制客户端程序使用特定的字符集如下方式:
[client]
default-character-set=charset_name
这通常是多余的。然而,当character_set_system
不同于character_set_server
或character_set_client
,并且您手动输入字符(如数据库对象标识符、列值或两者),这些可能在客户端输出中显示不正确或输出本身格式不正确。在这种情况下,使用--default-character-set=
—即将客户端字符集设置为匹配系统字符集—that is, setting the client character set to match the system character set—应该解决问题。system_character_set