我们每次使用Navicat创建数据库时候让选择字符集和排序规则,是不是会疑惑,知道要使用utf8字符集,但那个utf8mb4是个什么鬼?感觉和utf8差不多。

创建时:

创建后编辑:

当我们使用utf8创建完数据库后编辑数据库时,会发现使用utf8创建的数据库字符集转变为utf8mb3,和utf8mb4更像了。

 

MySQL在早期时候只有utf8,在5.5.3版本之后增加了这个utf8mb4的编码。mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。理论上utf8mb4是utf8的超集,原来使用utf8,然后将字符集修改为utf8mb4,也会不会对已有的utf8编码读取产生任何问题。

utf8 只支持最长三个字节的 UTF-8字符,也就是 Unicode 中的基本多文本平面。这可能是因为在MySQL发布初期,基本多文种平面之外的字符确实很少用到。而在MySQL5.5.3版本后,要在 Mysql 中保存 4 字节长度的 UTF-8 字符,就可以使用 utf8mb4 字符集了。例如可以用utf8mb4字符编码直接存储emoj表情,而不是存表情的替换字符.

如果你用来存储评论,聊天数据等信息时候最好使用utf8mb4.当然,为了更好的兼容性,应该使用utf8mb4,虽然对于 CHAR 类型数据,使用utf8mb4 存储会多消耗一些空间。根据 Mysql 官方建议,我们可以使用 VARCHAR 替代 CHAR。

说完这两个字符集的区别你是不是会恍然大悟,有一种原来如此的感觉。不过转念一想又勃然大怒,字符集也就两种,但是下面的排序规则那么多让我怎么选择?!

少侠请先息怒,且听我慢慢道来。

 

 

以上图为例,其实排序规则我们看后缀只有三种结尾_ci ,  _cs  ,   _bin

1)ci全称为case insensitive,意思是大小写不敏感;

2)cs区分大小写;

3)bin是以二进制数据存储,且区分大小写。

以我们常用的utf8字符集对应的排序规则utf8_general_ci为例

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

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

6)utf8_unicode_ci准确度高,但校对速度稍慢。

当然读者如果对于utf8mb4下的每个排序规则都感兴趣想了解的话,不妨可以看一下这篇文章,在此我就不多赘述了。

 utf8mb4_cs_0900_ai_ci作用简介

这里再补充一个常见的数据库导入报错:sql文件导入数据库报utf8mb4_0900_ai_ci错误

可以参考这篇文章:  utf8mb4_0900_ai_ci错误的解决方案

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐