首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >utf8_general_ci和utf8_unicode_ci有什么不同?

utf8_general_ci和utf8_unicode_ci有什么不同?
EN

Stack Overflow用户
提问于 2009-06-24 04:49:32
回答 2查看 73.6K关注 0票数 91

可能重复:

What's the difference between utf8_general_ci and utf8_unicode_ci

我有两个unicode选项,它们看起来很适合mysql数据库。

代码语言:javascript
复制
utf8_general_ci unicode (multilingual), case-insensitive
utf8_unicode_ci unicode (multilingual), case-insensitive

你能解释一下utf8_general_ci和utf8_unicode_ci之间的区别吗?在设计数据库时,选择其中一个会有什么影响?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-06-24 04:53:24

utf8_general_ci是一种非常简单的-在Unicode上,非常破旧的-排序规则,它在一般Unicode文本上给出不正确的结果。它的作用是:

对于规范的decomposition

  • removes,
  • 将任何组合字符转换为Unicode标准化形式D
  • 将转换为大写

这在Unicode上不能正常工作,因为它不理解Unicode大小写。Unicode大小写本身要比面向ASCII的方法复杂得多。例如:

  • “ẞ”的小写是“?”,但“?”的大写是“SS”。
  • 有两个小写的希腊语sigma,但只有一个是大写的;考虑像“ø”这样的“Σίσυφος”.
  • Letters,不要分解为“o”加上变音符号,这意味着它不能正确排序。

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

  1. utf8_unicode_ci使用标准的,支持所谓的扩展和连字,例如:德文字母§(U+00DF字母SHARP S)在"ss“字母附近排序,U+0152拉丁文大写连字Œ在"OE”附近排序。

utf8_general_ci不支持扩展/连字,它将所有这些字母作为单个字符进行排序,有时还会以错误的顺序排序。

对于所有脚本,

  1. 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

票数 140
EN

Stack Overflow用户

发布于 2009-06-24 04:55:52

MySQL documentation中的Unicode Character Sets

对于任何Unicode字符集,使用_general_ci排序规则执行的操作都比使用_unicode_ci排序规则执行的操作快。例如,与utf8_unicode_ci比较相比,utf8_general_ci排序规则的比较速度更快,但准确性略低。这样做的原因是utf8_unicode_ci支持诸如扩展之类的映射;也就是说,当一个字符与其他字符的组合进行比较时。例如,在德语和其他一些语言中,“ß”等于“ss”。utf8_unicode_ci还支持缩写和可忽略字符。utf8_general_ci是不支持扩展、收缩或可忽略字符的旧排序规则。它只能在字符之间进行一对一的比较。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1036454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档