Mysql UTF-8:通用?箱子Unicode?
我试图找出我应该对各种类型的数据使用什么样的排序规则。我将存储的内容100%是用户提交的 我的理解是,我应该使用UTF-8通用CI(不区分大小写)而不是UTF-8二进制文件。然而,我找不到UTF-8通用CI和UTF-8 Unicode CI之间的明确区别Mysql UTF-8:通用?箱子Unicode?,mysql,utf-8,collation,Mysql,Utf 8,Collation,我试图找出我应该对各种类型的数据使用什么样的排序规则。我将存储的内容100%是用户提交的 我的理解是,我应该使用UTF-8通用CI(不区分大小写)而不是UTF-8二进制文件。然而,我找不到UTF-8通用CI和UTF-8 Unicode CI之间的明确区别 我应该将用户提交的内容存储在UTF-8 General或UTF-8 Unicode CI列中吗 UTF-8二进制文件适用于什么类型的数据 一般来说,utf8\u general\u ci比utf8\u unicode\u ci快,但不太正确 区
utf8_general_ci和utf8_unicode_ci都执行不区分大小写的比较。相反,utf8\u bin区分大小写(除其他差异外),因为它比较字符的二进制值。您还应该知道,使用utf8\u general\u ci作为唯一索引或主索引时,插入两个值(如“a”和“á”)会产生重复的键错误。真的吗,我用unique索引测试了在列中保存像“é”和“e”这样的值,它们在“utf8\u unicode\u ci”和“utf8\u general\u ci”上都会导致重复错误。您只能将它们保存在“utf8\U bin”整理列中 和mysql文档(in)建议将其示例集“utf8\u general\u ci”排序
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
盲目比较位。没有案件折叠,没有口音剥离utf8\u bin
将一个码点与一个码点进行比较。它进行大小写折叠和重音去除,但不进行两个字符的比较;例如:utf8\u general\u ci
在此排序规则中不等于ij
ij
是一组特定于语言的规则,但与utf8\u*\ u-ci
类似。一些特殊情况:unicode\u-ci
,ch
,ch
,ch
ll
遵循旧的unicode标准进行比较<代码>ij=utf8\u unicode\u ci
,但是ij
!=<代码>æae
遵循更新的unicode标准<代码>ae=utf8\u unicode\u 520\u ci
æ
utf8mb4
经过适当的拼写更改后,以上几点适用于utf8mb4
。今后,首选utf8mb4
和utf8mb4\u unicode\u 520\u ci
- utf16和utf32是utf8的变体;它们几乎没有任何用处
- ucs2比utf8更接近“Unicode”;这几乎没有用
- 接受的答案已过时
如果您使用MySQL 5.5.3+,请使用
utf8mb4\u unicode\u ci
而不是utf8\u unicode\u ci
,以确保用户键入的字符不会给您带来错误
例如,utf8mb4
支持emojis,而utf8
可能会给您带来数百个与编码相关的错误,如:
不正确的字符串值:“\xF0\x9F\x98\x81…”对于第1行的“数据”列
我认为,如果您没有充分的理由使用unicode\u ci,那么就使用“general\u ci”。但这并不能真正深入地回答问题。这些排序规则之间到底有什么区别?您是对的,为了简单起见,这里不提供确切的区别。我在一篇文章中添加了一个链接,内容完全不同。NBshow collation代码>允许您查看每个字符集的默认排序规则。5.1将utf8\u general\u ci
显示为utf8
的默认值。是否有任何资源可以更深入地了解两种排序规则之间的实际速度差异?我们说的是性能下降0.1%还是下降10%?谢谢,这对于避免类似的用户名很有用(例如,如果“jose”存在,我不希望其他人创建“jose”用户)。注意:这对于大多数utf8排序规则(utf8_bin除外)也是适用的。最可靠/最安全/最全面的是utf8\u unicode\u ci
我使用utf8\u bin,我希望在索引中区分何塞和何塞。例如,记录搜索/替换操作的列,其中用户可能已决定搜索josé并将其替换为jose。(我正在写一个电子表格程序)我对这个做了一个快速测试,结果似乎是准确的。当涉及到列上的唯一键和具有波浪号等的值时,这两个排序规则的行为都是相同的。@MirroredFate好的,我应该在那里添加,列应该具有导致此错误的唯一索引。这在我的回答中暗示了这一点。旁注:但是,对于完全的UTF-8支持,请使用utf8mb4
而不是utf8
。在这里发表评论是因为这个流行问题的答案并没有解决这个问题。如果您需要折叠大小写,但需要区分重音,请在.clic或