場景: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