在開發微信開放平臺, 接入微信公衆號的數據時, 關於用戶的nickname和文本消息是,大量出現emoji的文本信息, 超時了utf-8字符集的存儲範圍html
在存儲數據時, 出現部分特殊字符存儲字符串失敗. java
查閱MySQL官方文檔時,給出以下支持utf8轉utf8mb4的官方處理辦法mysql
https://dev.mysql.com/doc/refman/5.7/en/charset-unicode-conversion.htmlsql
上述的步驟只是針對server端的配置.數據庫
由於我目前的項目, 使用的是JAVA編寫, 使用JDBC鏈接操做數據庫, 以下針對的JDBC操做的解決方案微信
JDBC的URL以前的配置方式ide
String url = "jdbc:mysql://HOST:PORT/DATABASE?useUnicode=true&characterEncoding=UTF-8";
在鏈接配置中,聲明UTF-8的字符編碼,在目前的存儲需求上來說,在存儲emoji字符串時會報錯. 就算服務端的數據庫設置了utf8mb4字符集類型編碼
客戶端修改爲以下配置url
String url = "jdbc:mysql://HOST:PORT/DATABASE?useUnicode=true&characterEncoding=utf8mb4";
客戶端鏈接時報錯,不支持該字符集code
鏈接配置改爲
String url = "jdbc:mysql://HOST:PORT/DATABASE";
同時數據庫配置文件my.cnf 進行相應的修改
[client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci
重啓服務MySQL服務
問題到此解決