今天跟着慕課SpringBoot練習的時候,數據庫插入中文遇到了編碼錯誤問題,
.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1366, SQLState: 22001
保存中文數據,發現在數據庫中顯示爲???
最後上網一一排查,解決了這些問題。
參考的文章如下:https://blog.csdn.net/blueheart20/article/details/52385142
文中的環境是在centos下的,我的問題是在windows下的。
排查過程如下:
1. IDE的編碼,是否爲UTF-8。
解決方案:
以IDEA爲例,File->Settings->Editor->FileEncodings,三個關於編碼的屬性,
FileEncoding,ProjectEncoding,Default encoding for properties全部換成UTF-8
2.代碼裏的數據庫連接URL尾部是否加上了編碼設置,&characterEncoding=utf-8
解決方案:jdbc:mysql://localhost:3306/luckymoney?serverTimezone=GMT%2B8&characterEncoding=utf-8
3.本地MySQL的編碼格式是否爲UTF-8
解決方案:在控制檯中,登入mysql,使用show variables like 'char%';命令去查看本機的mysql編碼格式
然後把不是UTF-8的全部設置成UTF-8,如果只有部分,可以自己篩選
代碼如下:
set character_set_client = utf8;
set character_set_server = utf8;
set character_set_connection = utf8;
set character_set_database = utf8;
set character_set_results = utf8;
set collation_connection = utf8_general_ci;
set collation_database = utf8_general_ci;
set collation_server = utf8_general_ci;
4.已經創建好的數據庫編碼是否爲UTF-8
5.已經創建好的表的編碼是否爲UTF-8
解決方案:4和5中,我都是在navicat中進行操作的,
修改操作比較簡單,不多贅述了
6.已經創建好的表裏的字段的編碼是否爲UTF-8
解決方案:查看出錯的表的設計,然後點擊指定的字段進行修改
PS:這裏有個值得注意的問題,修改好數據庫,表的編碼以後,已經創建好的表的字段的編碼,並不會改變,需要重新去創建
或者去修改出錯的字段的編碼,然後問題就迎刃而解了,如果項目不復雜,推薦重新建表,避免每個字段都需要修改。
上述的分析過程有一個遺漏的地方,就是MySQL的配置文件,my.ini,不知道這個會不會對亂碼產生影響,如果上述過程走完,還是亂碼,可以把這個也設置一個默認編碼爲UTF-8.