需要掌握: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
