本身的練習項目中涉及保存微信的nickname,以前一直正常使用,可是忽然遇到一個以前沒有遇到的問題。通過調試發現錯誤以下: Incorrect string value: '\xF0\x9F\x99\x88\xF0\x9F...' for column 'nickname' at row 1 通過仔細查看發現能夠得到nickname的數據,可是沒法保存到mysql數據庫,查看用戶的微信發如今nickname中使用了emoji字符。 到百度(只能用這個,其餘的麻煩呀。)上查找發現主要解決方案就是MySQL的編碼設置由utf8轉爲utf8mb4。 具體解釋可見:[詳細emoji表情與utf8mb4的關係][1] ,寫的很是全面詳細。
網上的解決辦法大可能是修改my.cnf參數,設置mysql的編碼爲utf8mb4,這種方法雖然完全,可是一般要重啓mysql,會形成生產系統臨時當機。我認爲寫的比較好的方法是:mysql/Java服務端對emoji的支持,通常可參考以上方法。文章中的關鍵點也說的比較清楚。html
下面是個人處理方法:
要求:java
1.MySQL的版本不能過低,低於5.5.3的版本不支持utf8mb4編碼。select version(); 2.JDBC驅動版本不能過低,mysql connector版本高於5.1.13。 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> 3.將表中的對應字段,好比會員表的呢稱字段,其字符集修改爲utf8mb4。 4.最後修改druid數據源的配置,增長一行: <property name="connectionInitSqls" value="set names utf8mb4;"/> 5.檢查下jdbc鏈接串的設置: jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8 這裏要注意:有人建議刪除useUnicode=true&characterEncoding=utf8,但好像我這裏會發生保存數據時發生亂碼的現象。
本文重要參考:mysql : utf8mb4 的問題mysql