对于数据库来说,字符集更加重要,因为数据库存储的大部分都是各种文字,字符集对数据库的存储,处理性能以及日后系统的移植,推广都会有影响。主要考虑因素有:

满足应用支持语言的需求,如果应用要处理各种各样的文字,或者需要发布到使用不同语言的国家或者地区,应该选择Unicode,对于MySQL来说,目前就是UTF-8.

如果应用中涉及已有数据的导入,就要充分考虑字符集对已有数据的兼容。

如果数据库只需要支持一般中文,数据量很大,性能要求也很高,那就应该选择双字节的中文字符集,相对于UTF-8而言GBK比较节省空间,减少磁盘IO,数据库cache以及网络传输时间,从而提高性能,如果仅有少量数据那么选择UTF-8更好。

如果数据库需要做大量的字符运算,如比较,排序等,选择定长字符集可能更好,处理速度会更快

如果所有客户端程序都支持相同的字符集,应该有限选择该字符集作为数据库字符集,可以避免因字符级转换带来的性能开销和数据损失。

查看所有可用的字符集的命令是:

show character set

MySQL字符集的设置

MySQL的字符集和校对规则有4个级别的默认设置

服务器级

数据库级

表级

字段级

服务器字符集和校对规则

服务器字符集和校对在MySQL服务启动时确定

可以在my.cnf中设置:

[mysql]

default-character-set=gbk

或者在启动选项中指定:

mysql--default-character-set=gbk;

可以使用命令查询当前服务器的字符集和校对规则

show variables like'character_set_server'

show variables like 'collation_server'

数据库字符集和校对规则

在创建数据库时指定,也可以在创建完数据库后通过

alter database

进行修改,如果数据库里面已经存在数据,那么修改字符集以后并不能将已有的数据按照新的字符集进行存放,不能通过修改字符集直接修改数据的内容。

设置数据库字符集的规则是:

如果指定了字符集和校对规则,则使用指定的,如果只指定了字符集,没有指定校对规则,则使用该字符集默认的校对规则,如果两者都没有指定,则使用服务器的字符集和校对规则。

要显示当前数据库的字符集和校对规则,可以使用下列命令

show variables like'character_set_database'

show variables like 'collation_database'

表和列的字符集规则用到的较少,不在详述。