Mysql的utf8mb4,utf8mb4_bin、utf8mb4_general_ci、utf8mb4_unicode_ci区别

需要掌握:ASCII、GBK、Unicode、UTF-8编码(字符集)

utf8mb4介绍

MySQL 5.5.3之后增加了utfmb4字符编码
支持BMP(Basic Multilingual Plane,基本多文种平面)和补充字符
最多使用4个字节存储字符

为什么提出utf8mb4

UTF-8:是使用1~4个字节,一种变长的编码格式,字符编码。

mysql 的 UTF-8:编码最大字符长度为 3 字节,包含了大多数字符
如果遇到 4 字节的宽字符就会发生错误。如 emoji表情 和 一些生僻汉字

utf8mb4的含义

mb4:即 most bytes 4,使用4个字节来表示完整的UTF-8。

utf8mb4 是utf8的超集并完全兼容utf8,能够用四个字节存储更多的字符。

utf8mb4_bin

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

登录、条件查询、like模糊查询等,都区分大小写

utf8mb4_general_ci

ci 即 case insensitive,不区分大小写。没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。但是,在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。

utf8_general_ci 比较速度很快,但是与使用 utf8mb4_unicode_ci的校对规则相比,比较正确性较差。

一般足够我们使用

utf8mb4_unicode_ci

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

utf8mb4_general_ci VS utf8mb4_unicode_ci

准确性:

  • utf8mb4_unicode_ci是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序
  • utf8mb4_general_ci没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。

但是,在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。

性能

  • utf8mb4_general_ci在比较和排序的时候更快
  • utf8mb4_unicode_ci在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。

但是在绝大多数情况下发,不会发生此类复杂比较。相比选择哪一种collation,使用者更应该关心字符集与排序规则在db里需要统一。

https://blog.csdn.net/yzh_1346983557/java/article/details/89643071
https://www.cnblogs.com/amyzhu/p/9595665.html


原文出处:/show_1EF5mccaUebx.html