场景:java
最近在作一个微信商城mysql
技术框架:jfinal 2.2 + jfinal weixin 1.7 +freemarker+mysql+sui;sql
同步微信用户信息时发现,微信用户昵称有特殊字符的用户 记录不能入库;数据库
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8D\xAC\xE8\x95...' for column 'nickname' at row 1微信
记得建库建表的时候都是选择utf8 字符集;框架
特地搜索了下,是由于昵称中含emoji 表情的缘由;ui
http://blog.itpub.net/26230597/viewspace-1243233/spa
特此备注下;.net
问题分析总结:
㈠ 缘由
普通的字符串或者表情都是占位3个字节,因此utf8足够用了,可是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机遇和挑战、避免 emoji 表情符号带来的问题、涉及无线相关的 MySQL 数据库建议都提早采用 utf8mb4 字符集,这必需要做为移动互联网行业的一个技术选型的要点
㈡ 限制
须要 >= MySQL 5.5.3版本、从库也必须是5.5的了、低版本不支持这个字符集、复制报错。blog