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 中utf8generalunicode 变体有什么区别? (我了解到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编码的区别

MySQL数据库建库时SQL语句中数据库名表名用引号的问题以及COLLATE utf8_general_ci的含义

具有与 MySQL 的 utf8_general_ci 排序相似特征的 Java Collat​​or