MySQL插入中文亂碼問題

今天跟着慕課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.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章