设为首页 收藏本站
查看: 1421|回复: 0

[经验分享] Mysql排序规则utf8_unicode_ci与utf8_general_ci的区别

[复制链接]

尚未签到

发表于 2016-10-23 06:59:01 | 显示全部楼层 |阅读模式
  Mysql白皮书如下描述:

MySQL支持30多种字符集的70多种 校对规则。字符集和它们的默认校对规则可以通过SHOW CHARACTER SET语句显示:
  
  mysql> SHOW CHARACTER SET;
  +----------+-----------------------------+---------------------+
  | Charset  | Description                 | Default collation   |
  +----------+-----------------------------+---------------------+
  | big5     | Big5 Traditional Chinese    | big5_chinese_ci     |
  | dec8     | DEC West European           | dec8_swedish_ci     |
  | cp850    | DOS West European           | cp850_general_ci    |
  | hp8      | HP West European            | hp8_english_ci      |
  | koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |
  | latin1   | cp1252 West European        | latin1_swedish_ci   |
  | latin2   | ISO 8859-2 Central European | latin2_general_ci   |
  | swe7     | 7bit Swedish                | swe7_swedish_ci     |
  | ascii    | US ASCII                    | ascii general ci    |
  | ujis     | EUC-JP Japanese             | ujis_japanese_ci    |
  | sjis     | Shift-JIS Japanese          | sjis_japanese_ci    |
  | hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   |
  | tis620   | TIS620 Thai                 | tis620_thai_ci      |
  | euckr    | EUC-KR Korean               | euckr_korean_ci     |
  | koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    |
  | gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   |
  | greek    | ISO 8859-7 Greek            | greek_general_ci    |
  | cp1250   | Windows Central European    | cp1250_general_ci   |
  | gbk      | GBK Simplified Chinese      | gbk_chinese_ci      |
  | latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   |
  | armscii8 | ARMSCII-8 Armenian          | armscii8_general_ci |
  | utf8     | UTF-8 Unicode               | utf8_general_ci     |
  | ucs2     | UCS-2 Unicode               | ucs2_general_ci     |
  | cp866    | DOS Russian                 | cp866_general_ci    |
  | keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  |
  | macce    | Mac Central European        | macce_general_ci    |
  | macroman | Mac West European           | macroman_general_ci |
  | cp852    | DOS Central European        | cp852_general_ci    |
  | latin7   | ISO 8859-13 Baltic          | latin7_general_ci   |
  | cp1251   | Windows Cyrillic            | cp1251_general_ci   |
  | cp1256   | Windows Arabic              | cp1256_general_ci   |
  | cp1257   | Windows Baltic              | cp1257_general_ci   |
  | binary   | Binary pseudo charset       | binary              |
  | geostd8  | GEOSTD8 Georgian            | geostd8_general_ci  |
  | cp932    | SJIS for Windows Japanese   | cp932_japanese_ci   |
  | eucjpms  | UJIS for Windows Japanese   | eucjpms_japanese_ci |
  +----------+-----------------------------+---------------------+
  
  Unicode字符集
  MySQL有两种Unicode字符集。你能够使用这些字符集保存大约650种语言的文本。
  ·         ucs2 (UCS-2 Unicode)校对规则:
  mysql> SHOW COLLATION LIKE 'ucs2%';
  +--------------------+---------+-----+---------+----------+---------+
  | Collation          | Charset | Id  | Default | Compiled | Sortlen |
  +--------------------+---------+-----+---------+----------+---------+
  | ucs2_general_ci    | ucs2    |  35 | Yes     | Yes      |       1 |
  | ucs2_bin           | ucs2    |  90 |         | Yes      |       1 |
  | ucs2_unicode_ci    | ucs2    | 128 |         | Yes      |       8 |
  | ucs2_icelandic_ci  | ucs2    | 129 |         | Yes      |       8 |
  | ucs2_latvian_ci    | ucs2    | 130 |         | Yes      |       8 |
  | ucs2_romanian_ci   | ucs2    | 131 |         | Yes      |       8 |
  | ucs2_slovenian_ci  | ucs2    | 132 |         | Yes      |       8 |
  | ucs2_polish_ci     | ucs2    | 133 |         | Yes      |       8 |
  | ucs2_estonian_ci   | ucs2    | 134 |         | Yes      |       8 |
  | ucs2_spanish_ci    | ucs2    | 135 |         | Yes      |       8 |
  | ucs2_swedish_ci    | ucs2    | 136 |         | Yes      |       8 |
  | ucs2_turkish_ci    | ucs2    | 137 |         | Yes      |       8 |
  | ucs2_czech_ci      | ucs2    | 138 |         | Yes      |       8 |
  | ucs2_danish_ci     | ucs2    | 139 |         | Yes      |       8 |
  | ucs2_lithuanian_ci | ucs2    | 140 |         | Yes      |       8 |
  | ucs2_slovak_ci     | ucs2    | 141 |         | Yes      |       8 |
  | ucs2_spanish2_ci   | ucs2    | 142 |         | Yes      |       8 |
  | ucs2_roman_ci      | ucs2    | 143 |         | Yes      |       8 |
  | ucs2_persian_ci    | ucs2    | 144 |         | Yes      |       8 |
  | ucs2_esperanto_ci  | ucs2    | 145 |         | Yes      |       8 |
  +--------------------+---------+-----+---------+----------+---------+
  utf8 (UTF-8 Unicode)校对规则:
  mysql> SHOW COLLATION LIKE 'utf8%';
  +--------------------+---------+-----+---------+----------+---------+
  | Collation          | Charset | Id  | Default | Compiled | Sortlen |
  +--------------------+---------+-----+---------+----------+---------+
  | utf8_general_ci    | utf8    |  33 | Yes     | Yes      |       1 |
  | utf8_bin           | utf8    |  83 |         | Yes      |       1 |
  | utf8_unicode_ci    | utf8    | 192 |         | Yes      |       8 |
  | utf8_icelandic_ci  | utf8    | 193 |         | Yes      |       8 |
  | utf8_latvian_ci    | utf8    | 194 |         | Yes      |       8 |
  | utf8_romanian_ci   | utf8    | 195 |         | Yes      |       8 |
  | utf8_slovenian_ci  | utf8    | 196 |         | Yes      |       8 |
  | utf8_polish_ci     | utf8    | 197 |         | Yes      |       8 |
  | utf8_estonian_ci   | utf8    | 198 |         | Yes      |       8 |
  | utf8_spanish_ci    | utf8    | 199 |         | Yes      |       8 |
  | utf8_swedish_ci    | utf8    | 200 |         | Yes      |       8 |
  | utf8_turkish_ci    | utf8    | 201 |         | Yes      |       8 |
  | utf8_czech_ci      | utf8    | 202 |         | Yes      |       8 |
  | utf8_danish_ci     | utf8    | 203 |         | Yes      |       8 |
  | utf8_lithuanian_ci | utf8    | 204 |         | Yes      |       8 |
  | utf8_slovak_ci     | utf8    | 205 |         | Yes      |       8 |
  | utf8_spanish2_ci   | utf8    | 206 |         | Yes      |       8 |
  | utf8_roman_ci      | utf8    | 207 |         | Yes      |       8 |
  | utf8_persian_ci    | utf8    | 208 |         | Yes      |       8 |
  | utf8_esperanto_ci  | utf8    | 209 |         | Yes      |       8 |
  +--------------------+---------+-----+---------+----------+---------+
  utf8_unicode_ci校对规则是根据Unicode校对规则算法(UCA)执行的, 校对规则描述见 http://www.unicode.org/reports/tr10/。此校对规则使用UCA 4.0.0版本砝码
  键:http://www.unicode.org/Public/UC一个/4.0.0/一个llkeys-4.0.0.txt。(以下讨论使用utf8_unicode_ci,但同样适合ucs2_unicode_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,因
  为它比较准确。
  utf8_swedish_ci,与其它语言相关的utf8的校对规则相似,来源于utf8_unicode_ci,使用额外的语言规则。例如,在瑞典语中,以下的关系式成立,它在德语和法语中不成立:
  Ü = Y < Ö
  utf8_spanish_ci和utf8_spanish2_ci校对规则分别适用于现代和古典西班牙语。在两种 校对规则中,ñ’(n-发音符)是‘n’和‘o’之间的间隔字母。另外,对于古典西班牙
  语,‘ch’是‘c’和d之间的间隔字母,并且‘ll’是‘l’和‘m’之间的间隔字母。
  
  因为公司产品需要在日韩,东南亚等国家上线,需要考虑到排序规则。和公司DBA讨论,其实一般情况下是可以使用utf8_general_ci,综合评估使用utf8_general_ci,因为我们在查询的时候会比较多,所以考虑到性能问题。如果你的产品对正确性要求更高可以考虑使用utf8_unicode_ci。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-289956-1-1.html 上篇帖子: [MySQL 工具] pt-index-usage使用 --> 对查询中的索引进行分析 下篇帖子: php输出标准xml,php访问mysql数据库简单例子(可以被asp等程序读取)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表