字符集是一套文字符号、编码、比较规则的集合。对数据库来说,字符集更加重要,因为数据库存储的数据几乎都是各种文字,字符集对数据库的存储、处理性能,以及日后系统的移植都有影响。
MySQL中支持几十种字符集,在这些字符集之间我们应该如何选择合适的字符集呢?做为国内用户来讲,基本都在UTF8与GBK之间徘徊。
UTF8
UTF8是Unicode字符集,是UTF16改良版本,1至4字节编码规范,国际流行通用使用此编码,如果你的网站是多国语言就首选这个字符集。
GBK
这个应该是国内站长最熟悉的编码之一了,是汉字编码GB2312的扩充,目前GB2312已经废弃全部采用GBK方式。GBK属于双字节编码。如果数据库大量存储的是中文,性能要求高,就应该选择GBK编码方式。因为如果存储汉字的话,GBK比UTF8所占空间要小,GBK每个汉字只占用2个字节,UTF8汉字编码需要3个字节,所以PHP中截取或计算中英混合或者全中文字符串长度的时候比较麻烦就是因为编码原因导致。汉字内容采用GBK编码这样不仅占空间小,还可以减少磁盘I/O,数据库cache,以及网络传输时间(现在可忽略不计)从而提高性能。
相反,如果只有少量中文,那么UTF8就是绝对首选了,因为使用GBK去存储英文是占两个字节,而是用UTF8去存储英文只占一个字节,如果大量的英文都采用GBK就造成很大空间浪费了。
性能
GBK是定长字符集,UTF8是变长字符集,如果数据库需要做大量的字符运算、比较、排序等等,选择定长字符集会更好,因为定长字符集处理速度要比变长字符集处理速度快。