本节描述如何配置服务器来使用不同的字符集。还讨论如何设置服务器的时区并启用各个连接的时区支持。

5.10.1. 数据和排序用字符集

默认情况下,MySQL使用cp1252(Latin1)字符集根据Swedish/Finnish规则进行排序。这些 默认值适合美国和西欧大部分国家。

所有MySQL二进制分发版用--with-extra-charsets=complex编译而成。可以在所有标准程序中添加代码,使它们可以处理latin1和所有多字节二进制字符集。其它字符集根据需要从字符集定义文件载入。

字符集确定在名称中使用什么字符。它还确定如何用SELECT语句的ORDER BYGROUP BY子句对字符串进行排序。

还可以在启动服务器时用--default-character-set选项更改字符集。字符集可以用--with-charset=charset--with-extra-charsets=list-of-charsets | complex | all | none选项来configure,字符集配置文件列于SHAREDIR/charsets/Index。参见2.8.2节,“典型配置选项

还可以在你启动服务器时用--default-collation选项更改字符集 校对规则。校对规则必须是默认字符集的合法校对规则。(使用SHOW COLLATION语句来确定每个字符集使用哪个校对规则) 参见2.8.2节,“典型配置选项

如果在运行MySQL时更改字符集,还会更改排序顺序。结果是你必须对所有表运行myisamchk -r -q --set-character-set=charset ,或正确地对索引进行排序。

当客户端连接MySQL服务器时,服务器告诉客户端服务器的默认字符集是什么。客户端切换到该字符集进行连接。

当转义SQL查询的字符串时,你应使用mysql_real_escape_string()mysql_real_escape_string()等价于旧的mysql_escape_string()函数,不同的是它使用MYSQL连接句柄作为第一个参数,以便转义字符时可以使用相应的字符集。

如果客户端的编译路径不是服务器的安装目录,并且配置MySQL时没有包括MySQL二进制中的所有字符集,如果服务器运行时需要使用客户端设置的字符集之外的其它字符集,你必须告诉客户端从哪里找到更多的字符集。

可以指定--character-sets-dir选项来表示动态MySQL字符集所保存目录的路径。例如,可以将下面的行放入选项文件中:

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

你可以强制客户端使用专用字符集:

[client]
default-character-set=charset

但是一般情况不需要。

5.10.1.1. 使用德国字符集

MySQL 5.1,分别指定字符集和 校对规则。这说明如果你想使用German排序顺序,你应选择latin1 字符集和latin1_german1_cilatin1_german2_ci校对规则。例如,要用latin1_german1_ci校对规则启动服务器,应使用--character-set-server=latin1--collation-server=latin1_german1_ci选项。

关于这两种校对规则的不同之处,参见10.10.2节,“西欧字符集”

关注编程学问公众号