一般的解说是 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

MySQL 的 utf8_general_ci 和 utf8_unicode_ci 有什么区别,应如何选择?的更多相关文章

  1. 3个问题:MySQL 中 character set 与 collation 的理解;utf8_general_ci 与 utf8_unicode_ci 区别;uft8mb4 默认collation:utf8mb4_0900_ai_ci 的含义

    MySQL 中 character set 与 collation 的理解 出处:https://www.cnblogs.com/EasonJim/p/8128196.html 推荐: 编码使用 uf ...

  2. utf8_general_ci和utf8_unicode_ci的比较

    看到很多数据库的设计对于中文字符都是选择选用utf8_general_ci而非utf8_unicode_ci utf8_general_ci和utf8_unicode_ci的区别并不大:utf8_un ...

  3. MySQL单列索引和组合索引的区别介绍

    MySQL单列索引和组合索引的区别介绍 作者:佚名出处:IT专家网2010-11-22 13:05 MySQL单列索引是我们使用MySQL数据库中经常会见到的,MySQL单列索引和组合索引的区别可能有 ...

  4. MySQL中char和varchar有啥区别?优缺点是啥?

    在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定的长度,而varchar属于可变长的字符类型. char与varchar的区别 c ...

  5. MySQL连接问题【mysql_connect和mysql_pconnect区别】

    --MySQL连接问题[mysql_connect和mysql_pconnect区别] -------------------------------------------------------- ...

  6. MySQL 和 Oracle 在 MyBatis 使用中的区别

    MySQL 和 Oracle 在 MyBatis 使用中的区别: 区别 MySQL Oracle 存储过程的参数模式 mode 为 IN 时,是否需要指定 jdbcType 不需要:MyBatis 为 ...

  7. Mysql索引结构及常见索引的区别

    一.Mysql索引主要有两种结构:B+Tree索引和Hash索引 Hash索引 mysql中,只有Memory(Memory表只存在内存中,断电会消失,适用于临时表)存储引擎显示支持Hash索引,是M ...

  8. [转]MySQL单列索引和组合索引的区别介绍

    FROM : http://database.ctocio.com.cn/353/11664853.shtml MySQL单列索引是我们使用MySQL数据库中经常会见到的,MySQL单列索引和组合索引 ...

  9. Mysql中unique与primary约束的区别分析(转)

    本文章来给大家介绍在mysql中unique与primary约束的区别分析,unique与primary是我们在创建mysql时常用的类型了,下面我来给大家介绍介绍.   定义了UNIQUE约束的字段 ...

随机推荐

  1. C#/.NET Little Wonders: Use Cast() and OfType() to Change Sequence Type(zz)

    Once again, in this series of posts I look at the parts of the .NET Framework that may seem trivial, ...

  2. 【原】iOS学习之SQLite和CoreData数据库的比较

    1. SQLite数据库 sqlite数据库操作的基本流程是, 创建数据库, 再通过定义一些字段来定义表格结构, 可以利用sql语句向表格中插入记录, 删除记录, 修改记录, 表格之间也可以建立联系. ...

  3. FastDFS原理

    转自:http://blog.chinaunix.net/uid-20196318-id-4058561.html 开源的轻量级分布式文件系统,由跟踪服务器(tracker server).存储服务器 ...

  4. POJ2774 & 后缀数组模板题

    题意: 求两个字符串的LCP SOL: 模板题.连一起搞一搞就好了...主要是记录一下做(sha)题(bi)过程心(cao)得(dan)体(xin)会(qing) 后缀数组概念...还算是简单的,过程 ...

  5. CentOS6.4 安装SSDB

    1.安装 wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zipunzip mastercd ssd ...

  6. UIAlertView 与 UIActionSheet (提示用户)的使用方法

    UIAlertView 提示用户  帮助用户选择框 //    UIAlertView *alterView = [[UIAlertView alloc] initWithTitle:@"警 ...

  7. 【BZOJ】1975: [Sdoi2010]魔法猪学院

    题意 \(n(2 \le n \le 5000)\)个点,找尽量多的不同\(1\)到\(n\)的路径,每一次的花费就是路径的全值和,要求在费用不超过\(E\)的情况下路径最多. 分析 裸的最段路. 题 ...

  8. JavaScript笔记——引用类型之Object类型和Function类型

    <JavaScript高级程序设计>中介绍的几种JavaScript的引用类型,本文只记了Object跟Function类型 Object类型 创建对象 var person = new ...

  9. Working with C# dictionary

    Check dictionary value if it's empty dictionary.ElementAt(i).Value == DBNull.Value Check string valu ...

  10. Super Jumping! Jumping! Jumping!——E

    E. Super Jumping! Jumping! Jumping! Time Limit: 1000ms Memory Limit: 32768KB 64-bit integer IO forma ...