mysql utf8 unicode ci,关于mysql:utf8_general_ci和utf8_unicode_ci有什么区别?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:

What's the difference between utf8_general_ci and utf8_unicode_ci

我有两个Unicode选项,对于MySQL数据库来说很有希望。

utf8_general_ci unicode (multilingual), case-insensitive

utf8_unicode_ci unicode (multilingual), case-insensitive

你能解释一下utf8_-general_-ci和utf8_-unicode_-ci的区别吗?在设计数据库时,选择其中一个对另一个的影响是什么?

另请参见stackoverflow.com/questions/766809/…

utf8_general_ci是一个非常简单的unicode,非常破碎的排序规则,它在普通unicode文本上给出错误的结果。它的作用是:

转换为Unicode规范化形式d进行规范化分解

删除任何组合字符

转换为大写

这在Unicode上不能正常工作,因为它不理解Unicode大小写。单是Unicode的大小写就比一个注重ASCII的方法要复杂得多。例如:

小写的"?"是"吗?"但是大写的呢?""是"ss"。

有两个小写的希腊符号,但只有一个大写的;考虑"是吗?"西格玛?"。

像这样的字母?不要分解为"o"加上音调符号,这意味着它不会正确排序。

还有许多其他的微妙之处。

utf8_unicode_ci使用标准的unicode排序算法,支持所谓的扩展和绑定,例如:德文字母?(u+00df字母Sharp S)在"s s"附近排序信?(U+0152拉丁文大写连字Oe)在"Oe"附近排序。

utf8_general_ci不支持扩展/连接,它排序所有这些字母都是单个字符,有时顺序不对。

对于所有脚本,utf8_unicode_ci通常更准确。例如,在西里尔文块上:对于所有这些语言,utf8_unicode_ci都可以:俄语、保加利亚语、白俄罗斯语、马其顿语、塞尔维亚语和乌克兰语。而utf8_-general_-ci只适用于西里尔文的俄语和保加利亚语子集。白俄罗斯语、马其顿语、塞尔维亚语和乌克兰语中使用的附加字母分类不好。

EDOCX1[1]的成本是有点比utf8_general_ci慢。但这就是你为正确性付出的代价。要么你有一个错误的快速答案,要么是一个非常缓慢的正确答案。你的选择。很难证明给出错误答案的合理性,因此最好假设utf8_general_ci不存在,并且总是使用utf8_unicode_ci。好吧,除非你想要错误的答案。

资料来源:http://forums.mysql.com/read.php?103187048188748消息-188748

语言列表的道具

看起来这个答案是直接从mysql论坛forums.mysql.com/read.php复制的?103187048188748消息-188748

@马特:嗯,我们有些人在谷歌上搜索:p

在复制/粘贴答案时,不会阻止您引用源代码:p

那你为什么要用utf8_general_ci代替utf8_unicode_ci?

切勿使用utf8_general_cihttp://stackoverflow.com/a/766996/570763

@侏儒,速度快一点。

如果utf8_general_ci很糟糕,为什么mysql驱动程序在go中默认使用它?

从MySQL文档中的Unicode字符集:

For any Unicode character set, operations performed using the _general_ci collation are faster than those for the _unicode_ci collation. For example, comparisons for the utf8_general_ci collation are faster, but slightly less correct, than comparisons for utf8_unicode_ci. The reason for this is that utf8_unicode_ci supports mappings such as expansions; that is, when one character compares as equal to combinations of other characters. For example, in German and some other languages"?" is equal to"ss". utf8_unicode_ci also supports contractions and ignorable characters. utf8_general_ci is a legacy collation that does not support expansions, contractions, or ignorable characters. It can make only one-to-one comparisons between characters.

你可能感兴趣的:(mysql,utf8,unicode,ci)