MYSQL 5.5 之前, UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区, BMP是从哪到哪,到 http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters 这里看,基本就是0000~FFFF这一区。 从MYSQL5.5开始,可支持4个字节UTF编码utf8mb4,一个字符最多能有4字节,所以能支持更多的字符集。
utf8mb4兼容utf8,且比utf8能表示更多的字符。
在做移动应用时,会遇到ios用户会在文本的区域输入emoji表情,emoji就是表情符号,在手机短信里面已经是很流行使用的一种表情。
因为utf8mb4是utf8的超集,理论上即使client修改字符集为utf8mb4,也会不会对已有的utf8编码读取产生任何问题。
1.问题
1.MySQL在处理utf8mb4数据时,要比utf8慢;
2.存储字符数量,utf8mb4要比utf8少;
3.TIMESTAMP NOT NULL DEFAULT 类型的字段,当我们在程序中传入NULL时,Mysql 5.5会自动填充默认值,而5.6不会自动填充,这就违反了非空约束,会报错;
4.在mysql 5.6版本, utf8的表和utf8mb4的表join查询会导致索引失效;