問題背景:非常見中文漢字存入mysql庫
報錯信息:Cause: java.sql.SQLException: Incorrect string value: "xF0xA8xB3x92x0Ap..." for column "request" at row 1
pom信息如下:
com.alibaba druid 1.1.12 mysql mysql-connector-java 5.1.37
問題很明顯,因為mysql庫一般都是utf-8的字符集,只支持3字節的中文漢字,而特殊的中文漢字是用四字節存儲的,所以首先要把你的數據庫表的格式設置正確,修改語句如下:
ALTER TABLE 你的表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE 你的表名 CHANGE 字段名 VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
修改完成后,我們就可以處理代碼層面的問題了,
=============畫重點,敲黑板!!!==============我們需要在初始化druid數據源時,添加下面的配置,以保證連接mysql時,客戶端的字符集被指定為utf8mb4
public DataSource getDataSource() throws Exception { Properties props = new Properties(); props.put("driverClassName", "com.mysql.jdbc.Driver"); props.put("url", "你的jdbc連接串"); props.put("username", "你的用戶名"); props.put("password", "你的密碼"); props.put("initConnectionSqls", "set names utf8mb4;"); return DruidDataSourceFactory.createDataSource(props); }
initConnectionSqls這個配置項一定要寫對,網上很多的教程寫的都是connectionInitSqls,在比較新的druid版本是不認這個參數的,具體原因可以參加下方源碼的截圖。
參考文獻:
他山之石1
他山之石2
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72035.html
摘要:中無法存儲字符,源自于之前編碼只支持最大個字節,而需要個字節。事實上,如果只是某個列存在字符的存儲問題,那就只需要修改這個列的編碼類型即可。這涉及到應用與建立連接的問題。有一條命令是,會將的編碼統一設置。使用這條命令便可以達到我們的目的。 MySQL中無法存儲Emoji字符,源自于MySQL 5.5之前utf8編碼只支持最大3個字節,而Emoji需要4個字節。從MySQL 5.5開始,...
摘要:常見問題解決編譯錯誤問題日志編譯錯誤編譯提示等日志錯誤解決檢查是否安裝插件安裝安裝運行錯誤問題錯誤不能連接解決檢查服務是否啟動檢查地址和端口號未知數據庫解決檢查是否新建數據庫默認的數據庫為,可在不同環境的配置文件中更改例如中 spring-boot-plus 常見問題解決 FAQ 編譯錯誤問題 log日志編譯錯誤 編譯提示log.info等日志錯誤 解決 檢查是否安裝lombok插件...
閱讀 768·2021-09-26 09:55
閱讀 2058·2021-09-22 15:44
閱讀 1473·2019-08-30 15:54
閱讀 1324·2019-08-30 15:54
閱讀 2668·2019-08-29 16:57
閱讀 517·2019-08-29 16:26
閱讀 2490·2019-08-29 15:38
閱讀 2122·2019-08-26 11:48