sb的我竟然能因為亂碼問題折騰一天,原因也是讓我意想不到:錯誤出現現在mysql數據庫的url地址配置上😭。
其實在配置mysql的url的時候由於我記得不是特別牢,還特意在網上搜了url配置,並復制使用了某位博主的代碼。
jdbc:mysql:///mybatis?useSSL=false&useUnicode=true&charsetEncoding=utf-8
就是它,我亂碼的罪魁禍首😭。
細心的你就會發現錯誤了,characterEncoding
才是正解。
額,沒什么可說的,就是希望那位博主別再誤人子弟了😒。
一、解決流程
- 先檢查了自己是否配置了request.setCharacterEncoding("utf-8");
- 沒問題后,確認是否是post請求的方式,后面還特地用函數檢查String method = request.getMethod();
- 觀察是在什么階段發生亂碼的。經過數據打印,發現在sqlSession.commit();前都不會亂碼 🤔
- 在解決無果后,開始檢查所有文件的編碼格式,IDEA的setting中的File Encodings全部配置為utf-8,使用手動配置的Tomcat8.5,清除緩存等等無腦操作,還是無果
- 晚上回來,靜下心來,分析可以發現在commit前沒有問題,但到數據庫的數據始終是亂碼的,錯誤可能發現在mysql數據庫上✨
- 先是檢查數據庫、表創建是的編碼——是utf-8。然后是,db.properties配置文件,乍一看沒什么問題。於是又在網上查看mysql數據庫參數配置,一行一行的對比發現了錯誤。哎!!
二、代碼 —— 牢記
在此做一下記錄:
#Connect/J version 5.X
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///mybatis?useSSL=false&useServerPrepStmts=true&useUnicode=true&characterEncoding=utf-8
username=root
password=root
#Connect/J version 6.X以后的版本,適合於MySQL8.x新版本
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///mybatis?serverTimezone=UTC&useSSL=false&useServerPrepStmts=true&useUnicode=true&characterEncoding=utf-8
username=root
password=root
三、注意事項
mysql的url相關配置可以根據自己的實際應用場景添加其他參數配置。
1、mybatis中
注意在mybatis-config.xml中要將<properties resource="db.properties"/>
放在<configuration></configuration>
內的最前面。
四、經驗教訓
網絡的水很深,我有點把握不住。自己經過測試的代碼,才是自己的😢。