## 10.15 字符集配置

MySQL 服务器有一个内置的默认字符集和排序规则。要更改这些默认值，请使用[`--字符集服务器`](server-system-variables.html#sysvar_character_set_server)和[`--collat​​ion-server`](server-system-variables.html#sysvar_collation_server)启动服务器时的选项。看[第 5.1.7 节，“服务器命令选项”](server-options.html).排序规则必须是默认字符集的合法排序规则。要确定每个字符集可用的排序规则，请使用[`显示整理`](show-collation.html)声明或查询`INFORMATION_SCHEMA` [`校对`](information-schema-collations-table.html)桌子。

如果您尝试使用未编译到二进制文件中的字符集，您可能会遇到以下问题：

-   如果您的程序使用不正确的路径来确定字符集的存储位置（通常是`共享/mysql/charsets`要么`分享/字符集`MySQL 安装目录下的目录），这可以通过使用`--字符集目录`运行程序时的选项。例如，要指定 MySQL 客户端程序使用的目录，请将其列在`[客户]`您的选项文件组。此处给出的示例分别显示了 Unix 或 Windows 的设置可能是什么样的：

    ```
    [client]
    character-sets-dir=/usr/local/mysql/share/mysql/charsets

    [client]
    character-sets-dir="C:/Program Files/MySQL/MySQL Server 8.0/share/charsets"
    ```

-   如果字符集是不能动态加载的复杂字符集，则必须重新编译支持该字符集的程序。

    对于 Unicode 字符集，您可以使用 LDML 表示法定义排序规则而无需重新编译。看[第 10.14.4 节，“将 UCA 归类添加到 Unicode 字符集”](adding-collation-unicode-uca.html).

-   如果字符集是动态字符集，但您没有它的配置文件，您应该从新的 MySQL 发行版安装字符集的配置文件。

-   如果您的字符集索引文件 (`索引.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
```

这通常是不必要的。然而，当[`字符集系统`](server-system-variables.html#sysvar_character_set_system)不同于[`character_set_server`](server-system-variables.html#sysvar_character_set_server)要么[`character_set_client`](server-system-variables.html#sysvar_character_set_client)，并且您手动输入字符（作为数据库对象标识符、列值或两者兼有），这些可能会在客户端的输出中显示不正确，或者输出本身的格式可能不正确。在这种情况下，启动 mysql 客户端[`--默认字符集=*`system_character_set`*`](mysql-command-options.html#option_mysql_default-character-set)——也就是说，将客户端字符集设置为与系统字符集匹配——应该可以解决问题。
