前言
MYSQL中关于utf8 COLLATE排序相关的字符集有不少,utf8、utf8mb4_bin、utf8mb4_general_ci、utf8mb4_unicode_ci,下面来说说它们的区别。
utf8
MYSQL中的utf8其实是utf8mb3,最大字符长度为3字节,如果遇到4字节的宽字符插入就会异常。
最大为3字节的utf8字符集能编码的最大unicode字符是0xffff,即unicode编码中的基本多文种平面(BMP)编码区段。也就是说,任何不在unicode字符集基本多文种平面(BMP)编码区段的字符,都无法使用MYSQL的utf8字符集,包括Emoji表情(Emoji 是一种特殊的 unicode 编码,常见于 ios 和 android 手机上)、很多不常用的汉字和任何新增的unicode字符等。
总结:优点是节省空间,但是不能表达全部的utf8字符,推荐使用utf8mb4。
utf8mb4_bin
mb4
即 most bytes 4,最多使用4个字节表示字符,能够表示全部的unicode字符。
bin
表示将字符串每个字符用二进制数据编译存储,区分大小写,可以存二进制内容。
utf8mb4_general_ci
ci
即 case insensitiveÿ