Mysql建立数据库时字符集与排序规则的选择。

编辑:睿儿发表于:2021-01-15 20:47:05 45 次阅读

  Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。UTF8、UTF16、UTF32是Unicode码一种实现形式,都是属于Unicode编码。


  UTF8和UTF8MB4是常用的两种字符集,至于这两个选用哪个要根据自己业务情况而定。UTF8MB4兼容UTF8,比UTF8能表示更多的字符,Unicode编码区从编码区1-126属于UTF8区,当然UTF8MB4也兼容这个区,126行以下就是UTF8MB4扩充区,所以你要根据自己的业务进行选择,一般情况下UTF8就满足需求,当然如果考虑到以后扩展,比如考虑到以后存储emoji,就选择UTF8MB4,否则只是浪费空间。但一般情况下还是建议选择UTF8MB4,因为在做公众号接口获取用户信息时有的用户微信昵称极有可能是带emoji的,所以应该提前预防并使用兼容字符集,毕竟那点空间对于要求不是特别变态的数据库设计来说并不值得单独一提。


综上所述,所以我们在建立数据库时应该选择:utf8mb4 -- UTF-8 Unicode 编码方式。

image.png


  字符集有了,那么排序规则有这么多,该怎么选择呢,下面来看一下排序规则的几项建议?

  UTF8MB4常用的排序规则:utf8mb4_unicode_ci、utf8mb4_general_ci、utf8mb4_bin,选用哪种方式呢?先来分析一下:

  1、准确性:

  (1)utf8mb4_unicode_ci 是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序,不区分大小写

  (2)utf8mb4_general_ci 没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致,不区分大小写

  2、性能:

  (1)utf8mb4_general_ci 在比较和排序的时候更快

  (2)utf8mb4_unicode_ci 在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。相比选择哪一种collation,使用者更应该关心字符集与排序规则在db里需要统一。

  (3)utf8mb4_bin:将字符串每个字符用二进制数据编译存储,区分大小写,而且可以存二进制的内容。

  总而言之,utf8mb4_general_ci 和utf8mb4_unicode_ci 是我们最常使用的排序规则。utf8mb4_unicode_ci 校对速度快,但准确度稍差。utf8_unicode_ci准确度高,但校对速度稍慢,两者都不区分大小写。这两个选哪个视自己情况而定,还是那句话尽可能保持db中的字符集和排序规则的统计。


简单理解就是:

  bin 是二进制, a 和 A 会别区别对待.

  utf8mb4_general_ci 【不区分大小写】,这个你在注册用户名和邮箱的时候就要使用。

  utf8mb4_general_cs 【区分大小写】,如果用户名和邮箱用这个 就会照成不良后果

  utf8mb4_bin:字符串每个字符串用【二进制数据】编译存储。 【区分大小写】,而且可以存二进制的内容

  utf8mb4_unicode_ci和utf8_general_ci对中、英文来说没有实质的差别。

  utf8mb4_general_ci校对【速度快】,但【准确度稍差】。(准确度够用,一般建库选择这个)

  utf8mb4_unicode_ci【准确度高】,但校对【速度稍慢】。


而且这个排序规则还可以不选默认,默认的话它会自动选择 utf8mb4_general_ci  可能是因为MYSQL设置,或者其它原因 。。但建议还是这么选择为好。



原文地址:http://www.zjkdh.com/library/202101/59.html(张家口导航-睿儿知识库)

张家口睿儿网络科技有限公司版权所有