MySQL 的 utf8_general_ci 和 utf8_unicode_ci 有什么区别,应如何选择?

一般的解说是 utf8_general_ci 速度较快,utf8_unicode_ci 准确性较好 … 但快在那里,又好在什么地方呢?

首先就其准确性说,这世界上有无数种文字,除了通用的英文使用我们较熟悉的 A-Z 字符外,还有很多种近似的写法用于法文、德文、俄文等等…

光是一个 A 字就有数十种不同表现
为什么不都用同一种 A 呢,几十种多麻烦啊。事实上,它们在所属的文字上都各有意义,可能代表不同的发音,也可能是其他东西。在某些语言上,同一个单词不同发音可能就代表两个意思。

 

校对规则

utf8_unicode_ci 及 utf8_general_ci 的用途就是对那些看起来不一样的字符进行转换,令我们进行排序比对时更方便准确。

以下面为例,直接看起来是不相等的,但在实际应用上是成立的,这就是 utf8_unicode_ci 及 utf8_general_ci 工作的结果。
Ä = A

Ö = O
Ü = U

而 utf8_unicode_ci 准确性较好就表现在它有更完整的字元对照表上,它甚至可以将一个特别字符转换成多于一个英文字符,以德文中的 s 例:

在 utf8_unicode_ci 下面等式是成立
ß = ss

在 utf8_general_ci 只有这样才成立
ß = s

 

排序规则

因为 utf8_unicode_ci 有更完整字符表及转换规则,所以在排序的准确性上也比 utf8_general_ci 高一些。

utf8_general_ci 字符表的一部份

utf8_unicode_ci 有更完整的字符表

 

效能

同样因为 utf8_unicode_ci 的字符表及转换规则更复杂,所以在效能上比 utf8_general_ci 慢。

 

总结

如果你的应用是德文、俄文等等,或者需要精确处理国际化的内容,请用 utf8_unicode_ci 。
否则的话用 utf8_general_ci 就可以了。

 

备注

虽然说 utf8_unicode_ci 的字集比较完整,但其实还是不全的,所以 MySQL 还提供了很多种其他语言的专用字集,用于特别的本地应用,详细可以看看下面的官网连结

 

參考

MySQL 官方解说: http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html

 

原文:http://www.cnopensource.org/2012/06/mysql-%E7%9A%84-utf8_general_ci-%E5%92%8C-utf8_unicode_ci-%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB%EF%BC%8C%E5%BA%94%E5%A6%82%E4%BD%95%E9%80%89%E6%8B%A9%EF%BC%9F/

 

 

转自 http://blog.chedushi.com/archives/6462

posted @   AndyTai  Views(1535)  Comments(1Edit  收藏  举报
编辑推荐:
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
阅读排行:
· 2025成都.NET开发者Connect圆满结束
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
· 在 VS Code 中,一键安装 MCP Server!
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析
点击右上角即可分享
微信分享提示