rec*_*bot 83 mysql unicode character-encoding
我有两个unicode选项,看起来很有希望用于mysql数据库.
utf8_general_ci unicode (multilingual), case-insensitive
utf8_unicode_ci unicode (multilingual), case-insensitive
Run Code Online (Sandbox Code Playgroud)
你能解释一下utf8_general_ci和utf8_unicode_ci有什么区别吗?在设计数据库时,选择其中一个会产生什么影响?
Tim*_*tei 131
utf8_general_ci是一个非常简单的 - 并且在Unicode上,非常破碎 - 整理,在一般的Unicode文本上给出错误的结果.它的作用是:
这在Unicode上无法正常工作,因为它不了解Unicode大小写.单独使用Unicode外壳比使用ASCII思想的方法要复杂得多.例如:
还有许多其他细微之处.
utf8_unicode_ci使用标准的Unicode校对算法,支持所谓的扩展和连字,例如:德语字母ß(U + 00DF LETTER SHARP S)在"ss"附近排序.字母Œ(U + 0152 LATIN CAPITAL LIGATURE OE)在"OE"附近排序".utf8_general_ci 不支持扩展/连字,它将所有这些字母排序为单个字符,有时排序错误.
utf8_unicode_ci是一般所有脚本更准确.例如,在西里尔语块上:
utf8_unicode_ci适用于所有这些语言:俄语,保加利亚语,白俄罗斯语,马其顿语,塞尔维亚语和乌克兰语.虽然utf8_general_ci仅适用于俄罗斯和保加利亚语的西里尔语.白俄罗斯语,马其顿语,塞尔维亚语和乌克兰语中使用的额外字母排序不佳.成本utf8_unicode_ci是,它是一个稍微慢一点utf8_general_ci.但这是你为正确性付出的代价.要么你能得到一个错误的快速回答,要么是一个非常慢的答案,这是正确的.你的选择.很难证明给出错误的答案是合理的,所以最好假设utf8_general_ci不存在并且总是使用utf8_unicode_ci.好吧,除非你想要错误的答案.
资料来源:http://forums.mysql.com/read.php?103,187048,188748#msg-188748
Gum*_*mbo 20
对于任何Unicode字符集,使用
_general_ci排序规则执行的操作比排序规则更快_unicode_ci.例如,比较的比较utf8_general_ci速度更快,但比正确性稍差utf8_unicode_ci.这样做的原因是utf8_unicode_ci支持扩展等映射; 也就是说,当一个字符与其他字符的组合相等时.例如,在德语和其他一些语言中,"ß"等于"ss".utf8_unicode_ci还支持收缩和可忽略的角色.utf8_general_ci是一种遗留的排序规则,不支持扩展,收缩或可忽略的字符.它只能在字符之间进行一对一的比较.