MySQL数据库排序选择的作用和该如何选择编码格式
前言:在创建数据库的时候,会有这样一个选项->排序规则,平时在创建数据库的时候并没有注意,只是选择了默认,也没感觉有什么问题,今天看到这个突然好奇起来,所以看了一些资料做了以下的一些总结,若有错误之处请斧正。
这个排序规则的作用是什么?可以避免一些在数据库导入时出现的一些错误。很多时候在导入数据库的时候会出现字符乱码的问题,但是如果定制编码的话,就会更容易的发现问题。在mysql中我们经常使用的是utf8_unicode_ci和utf8_general_ci,两者还是有一些区别的,当前,utf8_unicode_ci校对规则仅部分支持Unicode校对规则算法。一些字符还是不能支持。并且,不能完全支持组合的记号。这主要影响越南和俄罗斯的一些少数民族语言,如:Udmurt 、Tatar、Bashkir和Mari。
utf8_general_ci是一个遗留的 校对规则,不支持扩展。它仅能够在字符之间进行逐个比较。这意味着utf8_general_ci校对规则进行的比较速度很快,但是与使用utf8_unicode_ci的 校对规则相比,比较正确性较差)。
例如,使用utf8_general_ci和utf8_unicode_ci两种 校对规则下面的比较相等: Ä = A Ö = O Ü = U 两种校对规则之间的区别是,对于utf8_general_ci下面的等式成立: ß = s 但是,对于utf8_unicode_ci下面等式成立: ß = ss 对于一种语言仅当使用utf8_unicode_ci排序做的不好时,才执行与具体语言相关的utf8字符集 校对规则。例如,对于德 语和法语,utf8_unicode_ci工作的很好,因此不再需要为这两种语言创建特殊的utf8校对规则。 utf8_general_ci也适用与德语和法语,除了‘ß'等于‘s',而不是‘ss'之外。 如果你的应用能够接受这些,那么应该使用utf8_general_ci,因为它速度快。否则,使用utf8_unicode_ci,因为它比较准确。
上面我们讲到utf8_xxxx_ci,但是对于上面的编码格式后面的ci还是有些不解,当然不只是ci,还有ki,wi什么的,他们代表的是什么尼?
排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集
如:
Chinese_PRC_CS_AI_WS
前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则
排序规则的后半部份即后缀 含义:
_BIN 二进制排序
_CI(CS) 是否区分大小写,CI不区分,CS区分
_AI(AS) 是否区分重音,AI不区分,AS区分
_KI(KS) 是否区分假名类型,KI不区分,KS区分
_WI(WS) 是否区分宽度 WI不区分,WS
现在对排序规则有一定的了解之后就明白自己需要那种编码格式了,平时我都是使用utf8_general_ci,最好是做到编码统一,就会减少数据库乱码这种情况的发生。。。
文章部分内容参考了http://www.jb51.net/article/48775.htm