mysql表的编码(utf8mb4与utf8)以及字符集选择问题

在设计数据库的时候,数据库的编码方式:utf8与utf8mb4如何选择?数据库的字符集:utf8mb4_general_ci与utf8mb4_unicode_ci如何选择?

编码的选择

utf8mb4是4个字节。utf8是3个字节。utf8mb4兼容性更好,占用空间更大。

 字符集的选择

主要从排序准确性和性能两方面看:

    • 准确性
      utf8mb4_unicode_ci 是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序
      utf8mb4_general_ci 没有实现Unicode排序规则,在遇到某些特殊语言或字符是,排序结果可能不是所期望的。
      但是在绝大多数情况下,这种特殊字符的顺序一定要那么精确吗。比如Unicode把ߌ当成ssOE来看;而general会把它们当成se,再如ÀÁÅåāă各自都与 A 相等。
    • 性能
      utf8mb4_general_ci 在比较和排序的时候更快
      utf8mb4_unicode_ci 在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。
      但是在绝大多数情况下,不会发生此类复杂比较。general理论上比Unicode可能快些,但相比现在的CPU来说,它远远不足以成为考虑性能的因素,索引涉及、SQL设计才是。 我个人推荐是 utf8mb4_unicode_ci,将来 8.0 里也极有可能使用变为默认的规则。相比选择哪一种collation,使用者应该更关心字符集与排序规则在db里要统一就好。

posted on 2021-06-09 11:31  xufat  阅读(580)  评论(0)    收藏  举报

导航

/* 返回顶部代码 */ TOP