导读
- 数据库入库的时候报了这样一个错。原因是入库的字段包含一个emoji表情。
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8C\xB8' for column 'fullname' at row 1
处理办法
utf8mb4的详解
- MySQL在5.5.3版本之后增加了这个utf8mb4的编码。
- utf8mb4是utf8的超集,理论上原来使用utf8,然后将字符集修改为utf8mb4,不会对已有的utf8编码读取产生任何问题。
- mb4就是most bytes 4的缩写,专门用来兼容四字节的unicode。
- utf8编码,最大字符长度为 3 字节,如果遇到 4 字节的字符就会出现错误了。
- 三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xFFFF,也就是 Unicode 中的基本多文平面(BMP)。Emoji 表情和一些不常用的汉字,以及任何新增的 Unicode 字符,不属于BMP。
- 可以用utf8mb4字符编码直接存储emoj表情,而不是存表情的替换字符。
- 为了获取更好的兼容性,应该使用 utf8mb4 而非 utf8。
- 对于 CHAR 类型数据,使用utf8mb4 存储会多消耗一些空间。
以上文字总结自
原文链接:http://blog.xieyc.com/utf8-and-utf8mb4/