首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将军?箱子?Unicode?

将军?箱子?Unicode?
EN

Stack Overflow用户
提问于 2010-02-26 19:03:55
回答 5查看 173.6K关注 0票数 294

我试图找出我应该对各种类型的数据使用什么排序规则。我将存储的内容100%是用户提交的。

我的理解是,我应该使用UTF-8通用CI (大小写不敏感),而不是UTF-8二进制。但是,我无法清楚地区分UTF-8通用CI和UTF-8 Unicode CI.

  1. 我应该将用户提交的内容存储在UTF-8通用或UTF-8 Unicode CI列中吗?
  2. UTF-8二进制文件适用于哪种类型的数据?
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-26 19:07:01

一般来说,utf8_general_ci比utf8_unicode_ci快,但不太正确。

以下是不同之处:

对于任何Unicode字符集,使用排序规则执行的_general_ci操作比对_unicode_ci排序规则执行的操作要快。例如,对utf8_general_ci排序规则的比较比对utf8_unicode_ci的比较更快,但稍微不正确。这是因为utf8_unicode_ci支持扩展等映射;也就是说,当一个字符与其他字符的组合相比较时。例如,在德语和其他一些语言中,“some”等于“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都执行不区分大小写的比较.在constrast中,utf8_bin是区分大小写的(以及其他差异),因为它比较字符的二进制值。

票数 305
EN

Stack Overflow用户

发布于 2011-01-19 14:11:30

您还应该注意到,对于utf8_general_ci,当使用varchar字段作为唯一索引或主索引时,插入'a‘和'á’这样的2个值会导致重复的键错误。

票数 93
EN

Stack Overflow用户

发布于 2016-07-29 17:54:16

  • utf8_bin盲目地比较比特。没有折叠,没有脱口口音。
  • utf8_general_ci比较了一个码点和一个码点。它做大小写折叠和重音剥离,但没有两个字符的比较;例如:在这个排序规则中,ij并不等于ij
  • utf8_*_ci是一组特定于语言的规则,但与unicode_ci不同.一些特例:ÇČchll
  • utf8_unicode_ci遵循传统的Unicode标准进行比较。ij=ij,但ae != æ
  • utf8_unicode_520_ci遵循较新的Unicode标准。ae = æ

有关在各种校对图排序规则中什么等于什么的详细信息,请参见utf8。

utf8,如MySQL所定义的,仅限于1到3字节的utf8代码.这就忽略了鄂莫吉和一些中国人。所以,如果你想要超越欧洲的话,你真的应该改用utf8mb4

以上各点适用于utf8mb4,经过适当的拼写更改。展望未来,utf8mb4utf8mb4_unicode_520_ci是首选。

  • utf16和utf32是utf8上的变体,实际上对它们没有任何用处。
  • ucs2更接近于"Unicode“,而不是"utf8";它实际上是没有用的。
票数 45
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2344118

复制
相关文章

相似问题

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