JDBC對Mysql utf8mb4字符集的處理

在開發微信開放平臺, 接入微信公衆號的數據時, 關於用戶的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服務

問題到此解決

相關文章
相關標籤/搜索