我试图弄清楚我应该对各种类型的数据使用哪种排序规则。我要存储的内容的100%是用户提交的。
我的理解是,我应该使用UTF-8 General CI(不区分大小写),而不是UTF-8 Binary。但是,我找不到UTF-8通用CI和UTF-8 Unicode CI之间的明显区别。
通常, utf8_general_ci 比 utf8_unicode_ci 快,但正确性较差。
区别在于:
对于任何Unicode字符集, 使用_general_ci归类执行的操作都比_unicode_ci归类执行的操作要快 。例如,utf8_general_ci归类的比较比utf8_unicode_ci的比较更快,但正确性稍差。原因是utf8_unicode_ci支持诸如扩展之类的映射。也就是说,当一个字符比较等于其他字符的组合时。例如,在德语和其他一些语言中,“ß”等于“ ss”。utf8_unicode_ci还支持收缩和可忽略字符。utf8_general_ci是旧版归类,不支持扩展,收缩或可忽略的字符。它只能在字符之间进行一对一比较。
引用自:http : //dev.mysql.com/doc/refman/5.0/en/charset-unicode- sets.html
有关更多详细说明,请阅读以下来自MySQL论坛的帖子:http : //forums.mysql.com/read.php?103,187048,188748
至于utf8_bin: utf8_general_ci 和 utf8_unicode_ci都 执行不区分大小写的比较。相反, utf8_bin区分大小写 (除其他差异外),因为它比较字符的二进制值。