首页   >   代码编程

MySQL字符集utf8、utf8mb4、utf8mb4_general_ci、utf8mb4_unicode_ci的区别

MySQL为我们提供了很多种字符集,来应对不同的问题场景,平时工作中没有过多关注,今天来做一下笔记。

utf8:

最大只支持3个字节的UTF-8字符,包含了大多数字符但并不是所有,而emoji和一些不常用的汉字,如“墅”,这些需要四个字节才能编码的就不支持。

utf8mb4:

在5.5.3版本之后增加了tf8mb4编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode,与之前的utf8字符集相比,可用性更高。

但相对于utf8来说,字节变多,数据库体积也就会变得更大,官方强烈推荐使用varchar而不要使用char,这样可以让字段有更好的伸缩性,从而稍微缓解一下空间消耗的问题。

MySQL字符集utf8、utf8mb4、utf8mb4_general_ci、utf8mb4_unicode_ci的区别

除了字符集,还有一个排序规则,在mysql中还有排序字符集的概念,对应上图中的排序规则,而在每张表的详细信息中,也可以看到这个排序规则,如果没有特殊指定,就会跟数据库保持一致

MySQL字符集utf8、utf8mb4、utf8mb4_general_ci、utf8mb4_unicode_ci的区别

而这个排序规则,在不同字符集下的写法也不一样,如果字符集是utf8,那么排序规则就是utf8_general_ci和utf8_unicode_ci;如果字符集是utf8mb4,那么排序规则就是utf8mb4_general_ci和utf8mb4_unicode_ci。

其实区别也不大,每一种字符集都对应的有general_ci和unicode_ci两种排序规则,那这两种排序规则有什么区别呢?

utf8mb4_unicode_ci:

基于标准的Unicode来排序和比较,能够在各种语言之间精确排序,在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法,所以兼容度比较高,但是性能不高。

utf8mb4_general_ci:

没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致,但是在比较和排序的时候速度更快。

QQ群Ⅰ: 686430774 (已满)

QQ群Ⅱ: 718410762 (已满)

QQ群Ⅲ: 638620451 (已满)

QQ群Ⅳ: 474195684

如果文章有帮到你,可以考虑请博主喝杯咖啡!

分享到:

欢迎分享本文,转载请注明出处!

作者:不忘初心

发布时间:2019-04-15

永久地址:https://www.jiweichengzhu.com/article/677cf71ca3064731a0b0b50bdf3b076c

评论