对于数据库来说,字符集更加重要,因为数据库存储的大部分都是各种文字,字符集对数据库的存储,处理性能以及日后系统的移植,推广都会有影响。主要考虑因素有:
满足应用支持语言的需求,如果应用要处理各种各样的文字,或者需要发布到使用不同语言的国家或者地区,应该选择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'
表和列的字符集规则用到的较少,不在详述。