• utf8_general_ci和utf8_unicode_ci的区别

    差异不大
    服务器君一共花费 46.779 ms 进行了 5 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    关于utf8_unicode_ci与utf8_general_ci这2个校对集,这里区别一下。

    Mysql 5.1中文手册中关于utf8_unicode_ci与utf8_general_ci的说明:

    当前,utf8_unicode_ci校对规则仅部分支持Unicode校对规则算法。一些字符还是不能支持。并且,不能完全支持组合的记号。这主要影响越南和俄罗斯的一些少数民族语言,如:Udmurt 、Tatar、Bashkir和Mari。

    utf8_unicode_ci的最主要的特色是支持扩展,即当把一个字母看作与其它字母组合相等时。例如,在德语和一些其它语言中‘ß’等于‘ss’。

    utf8_general_ci是一个遗留的 校对规则,不支持扩展。它仅能够在字符之间进行逐个比较。这意味着utf8_general_ci校对规则进行的比较速度很快,但是与使用utf8_unicode_ci的 校对规则相比,比较正确性较差)。

    例如,使用utf8_general_ci和utf8_unicode_ci两种 校对规则下面的比较相等:

    Ä = A
    Ö = O
    Ü = U
    

    两种校对规则之间的区别是,对于utf8_general_ci下面的等式成立:

    ß = s
    

    但是,对于utf8_unicode_ci下面等式成立:

    ß = ss
    

    对于一种语言仅当使用utf8_unicode_ci排序做的不好时,才执行与具体语言相关的utf8字符集 校对规则。例如,对于德语和法语,utf8_unicode_ci工作的很好,因此不再需要为这两种语言创建特殊的utf8校对规则。

    utf8_general_ci也适用与德语和法语,除了‘ß’等于‘s’,而不是‘ss’之外。如果你的应用能够接受这些,那么应该使用utf8_general_ci,因为它速度快。否则,使用utf8_unicode_ci,因为它比较准确。

    如果你想使用gb2312编码,那么建议你使用latin1作为数据表的默认字符集,这样就能直接用中文在命令行工具中插入数据,并且可以直接显示出来。而不要使用gb2312或者gbk等字符集,如果担心查询排序等问题,可以使用binary属性约束,例如:

    create table my_table ( name varchar(20) binary not null default '')type=myisam default charset latin1;
    

    用一句话概况上面这段话:utf8_unicode_ci比较准确,utf8_general_ci速度比较快。通常情况下 utf8_general_ci的准确性就够我们用的了,在我看过很多程序源码后,发现它们大多数也用的是utf8_general_ci,所以新建数据 库时一般选用utf8_general_ci就可以了。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [数据库技术] MySQL中英文混合排序 4 个条目
  2. [软件工程与项目管理] 开始使用Git 3 个条目
  3. [Python程序设计] Django模板系统 11 个条目
  4. [搜索引擎优化] 百度搜索引擎优化指南 3 个条目
  5. [Linux操作系统] CentOS上使用EPEL Repository 2 个条目
  6. [PHP程序设计] CodeIgniter与PHP框架设计 5 个条目
  7. [Python程序设计] Django数据库模型 6 个条目
  8. [智力开发与知识管理] 整体性学习步骤 9 个条目
  9. [JavaScript程序设计] Web实时通信技术名词解析 5 个条目
  10. [移动开发] 刷机与root相关 2 个条目
  11. [数据结构] 图的定义 1 个条目
  12. [Python程序设计] Django与表单 4 个条目
窗口 -- [博客]