Mysql的utf8mb4,utf8mb4_bin、utf8mb4_general_ci、utf8mb4_unicode_ci区别 作者:马育民 • 2020-06-27 09:35 • 阅读:11554 需要掌握:[ASCII、GBK、Unicode、UTF-8编码(字符集)](https://www.malaoshi.top/show_1EF2PfTMBHiG.html "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表情** 和 一些生僻汉字 [![](/upload/0/0/1IX46I6jSEnb.png)](/upload/0/0/1IX46I6jSEnb.png) # 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 原文出处:http://malaoshi.top/show_1EF5mccaUebx.html