Dol*_*lph 271 mysql collation utf-8
我试图找出我应该用于各种类型数据的排序规则.我将存储的100%内容是用户提交的.
我的理解是我应该使用UTF-8通用CI(Case-Insensitive)而不是UTF-8 Binary.但是,我无法找到UTF-8 General CI和UTF-8 Unicode CI之间的区别.
Sag*_*agi 293
通常,utf8_general_ci比utf8_unicode_ci快,但不太正确.
这是区别:
对于任何Unicode字符集,使用_general_ci排序规则执行的操作比_unicode_ci排序规则更快.例如,与utf8_unicode_ci的比较相比,utf8_general_ci整理的比较更快,但更不正确.原因是utf8_unicode_ci支持扩展等映射; 也就是说,当一个字符与其他字符的组合相等时.例如,在德语和其他一些语言中,"ß"等于"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都执行不区分大小写的比较.相反,utf8_bin区分大小写(以及其他差异),因为它比较了字符的二进制值.
小智 89
您还应该注意这样一个事实:当使用varchar字段作为唯一或主索引时,使用utf8_general_ci插入2个值(如'a'和'á')会产生重复键错误.
Ric*_*mes 28
utf8_bin盲目地比较这些比特.没有折叠的情况下,没有重点剥离.utf8_general_ci比较一个字节和一个字节.它会进行大小写折叠和重音剥离,但没有2个字符的比较:在此排序规则中ij不相同?.utf8_*_ci是一组特定于语言的规则,但另有说法unicode_ci.一些特殊情况:Ç,?,ch,llutf8_unicode_ci遵循旧的Unicode标准进行比较.ij= ?,但是ae!=æutf8_unicode_520_ci遵循较新的Unicode标准. ae=æ有关与各种utf8排序规则相同的详细信息,请参阅排序规则图表.
utf8,由MySQL定义仅限于1到3字节的utf8代码.这遗漏了表情符号和一些中文.所以utf8mb4如果你想远远超越欧洲,你应该切换到.
utf8mb4在适当的拼写更改后,以上几点适用.前进,utf8mb4并且utf8mb4_unicode_520_ci是首选.
小智 7
接受的答案已过时。
如果您使用 MySQL 5.5.3+,请使用utf8mb4_unicode_ci而不是utf8_unicode_ci确保您的用户输入的字符不会给您错误。
utf8mb4例如,支持表情符号,而utf8可能会给您带来数百个与编码相关的错误,例如:
Incorrect string value: ‘\xF0\x9F\x98\x81…’ for column ‘data’ at row 1
实际上,我在具有唯一索引的列中测试了像'é'和'e'这样的保存值,它们会在'utf8_unicode_ci'和'utf8_general_ci'上导致重复错误.您只能将它们保存在'utf8_bin'整理列中.
并且mysql文档(在http://dev.mysql.com/doc/refman/5.7/en/charset-applications.html中)建议在其示例中设置'utf8_general_ci'排序规则.
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
157619 次 |
| 最近记录: |