MySQL 中的 utf8_general_ci 和 utf8_unicode_ci 有啥区别?
Posted
技术标签:
【中文标题】MySQL 中的 utf8_general_ci 和 utf8_unicode_ci 有啥区别?【英文标题】:What's the difference between utf8_general_ci and utf8_unicode_ci in MySQL?MySQL 中的 utf8_general_ci 和 utf8_unicode_ci 有什么区别? 【发布时间】:2011-03-21 06:05:09 【问题描述】:一段时间以来,我一直使用 phpMyAdmin 来管理我的本地 mysql 数据库。我开始了解的一件事是我的数据库的正确字符集。我已经决定 UTF-8 是最好的兼容性(因为我的 Xhtml 模板作为 UTF-8 提供)但让我感到困惑的一件事是我在 phpMyAdmin 界面中看到的 UTF-8 的各种选项?
我隔离的两个是:
utf8_general_ci utf8_unicode_ci所以我的问题是:MySQL 中utf8
的general
和unicode
变体有什么区别? (我了解到ci
是不区分大小写的简写)
在这件事上任何帮助将不胜感激。
【问题讨论】:
简短的回答是utf8_general_ci
对于 Unicode 文本已损坏,甚至不应该存在。永远不要使用它。
【参考方案1】:
来自MySQL manual on Unicode Character Sets:
对于任何 Unicode 字符集,使用 _general_ci 归类执行的操作比使用 _unicode_ci 归类执行的操作要快。例如,utf8_general_ci 归类的比较比 utf8_unicode_ci 的比较更快,但正确性稍差。原因是 utf8_unicode_ci 支持扩展等映射;也就是说,当一个字符比较等于其他字符的组合时。例如,在德语和其他一些语言中,“
ß
”等于“ss
”。 utf8_unicode_ci 还支持缩写和可忽略的字符。 utf8_general_ci 是不支持扩展、收缩或可忽略字符的旧版排序规则。它只能在字符之间进行一对一的比较。
请参阅further information and examples 的参考页面。
【讨论】:
【参考方案2】:#@%!ing manual discusses this... :)
其中一个问题是某些操作的速度和准确性。
【讨论】:
以上是关于MySQL 中的 utf8_general_ci 和 utf8_unicode_ci 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
#1064 MySQL 中的错误。带有 MRG_MYISAM 引擎的 utf8_general_ci
Jira中的Mysql错误“操作'='的排序规则(latin1_swedish_ci,I MPLICIT)和(utf8_general_ci,COERCIBLE)的非法混合”[重复]
MySQL_编码utf8_bin和utf8_general_ci的区别
MySQL系列:utf8_bin和utf8_general_ci编码的区别