Mysql的utf8与utf8mb4区别,utf8mb4_bin、utf8mb4_gene。
。。
UTF-8是使⽤1~4个字节,⼀种变长的编码格式,字符编码。mb4即 most bytes 4,使⽤4个字节来表⽰完整的UTF-8。
mysql的 utf8 编码最⼤字符长度为 3 字节,如果遇到 4 字节的宽字符就会插⼊异常了。三个字节的 UTF-8 最⼤能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多⽂种平⾯(BMP)。也就是说,任何不在基本多⽂本平⾯的 Unicode字符,都⽆法使⽤ Mysql 的utf8 字符集存储。包括 Emoji 表情(Emoji 是⼀种特殊的 Unicode 编码,常见于 ios 和 android ⼿机上),和很多不常⽤的汉字,以及任何新增的 Unicode 字符等等。
总结:MySQL的utf8是utfmb3,只有三个字节,节省空间但不能表达全部的UTF-8。所以推荐使⽤utf8mb4。
utf8mb4_bin:将字符串每个字符⽤⼆进制数据编译存储,区分⼤⼩写,⽽且可以存⼆进制的内容。
utf8mb4_general_ci:ci即case insensitive,不区分⼤⼩写。没有实现Unicode排序规则,在遇到某些特殊语⾔或者字符集,排序结果可能不⼀致。但是,在绝⼤多数情况下,这些特殊字符的顺序并不需要那
么精确。
utf8mb4_unicode_ci:是基于标准的Unicode来排序和⽐较,能够在各种语⾔之间精确排序,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。
utf8mb4_general_ci是⼀个遗留的 校对规则,不⽀持扩展,它仅能够在字符之间进⾏逐个⽐较。utf8_general_ci校对规则进⾏的⽐较速度很快,但是与使⽤ utf8mb4_unicode_ci的校对规则相⽐,⽐较正确性较差。url编码和utf8区别
总结:general_ci 更快,unicode_ci 更准确。但相⽐现在的CPU来说,它远远不⾜以成为考虑性能的因素,索引涉及、SQL设计才是。使⽤者更应该关⼼字符集与排序规则在db⾥需要统⼀。(可能产⽣乱码的字段不要作为主键或唯⼀索引。例如:以 url 来作为唯⼀索引,但是它记录的有可能是乱码。)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。