天天看點

Spring Boot 中文亂碼 —— mysql 中文亂碼

今天在測試時遇到了一個問題,向伺服器發送一條往資料庫中插入中文的請求後,再發送查詢請求後,得到的是亂碼。下面展示錯誤:

向伺服器發送插入請求(使用postman):

Spring Boot 中文亂碼 —— mysql 中文亂碼

再次查詢,得到亂碼

Spring Boot 中文亂碼 —— mysql 中文亂碼

起初我認為是,SpringBoot 配置出了問題,遂根據部落格spring boot 亂碼解決彙總,對項目進行了修改,然而并沒起作用。調試後發現,在執行資料庫操作之前,沒有出現亂碼,遂懷疑是資料庫編碼出現了問題。

登陸mysql資料庫,執行一條插入中文的語句

Spring Boot 中文亂碼 —— mysql 中文亂碼

報錯,無法插入,執行語句

show variables like 'char%';
           

得到如下結果:

Spring Boot 中文亂碼 —— mysql 中文亂碼

找到問題所在,我們需要将character_set_database以及character_set_server改為utf8

1、在Mysql配置檔案中将character_set_server改為utf8

sudo nano /etc/mysql/mysql.conf.d/nano mysqld.cnf
           

在[mysqld]後加入

init-connect='SET NAMES utf8'
character-set-server = utf8
           

不要在配置檔案中添加character_set_database=utf8,這樣做會導緻mysql服務無法啟動。

2、修改character_set_database為utf8

首先重新開機mysql服務,再次執行

show variables like 'char%';
           

若character_set_database已經改為utf8,則可進行下一步操作。否則執行

ALTER DATABASE db_name CHARACTER SET utf8;
           

3、确認表以及字段的編碼形式

執行

SHOW CREATE TABLE branch;
           

檢視表、列的字元集是否都為ut8,若不是,根據以下代碼執行:

改變表和列的預設字元集:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE ...]
如:ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
           

僅改變表的字元集:

ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...];
如:ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
           

改變某一列的字元集:

ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];
如:ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;
           

然後再次測試插入中文的語句:

Spring Boot 中文亂碼 —— mysql 中文亂碼

運作成功。

重新開機Spring Boot,測試:發送插入請求:

Spring Boot 中文亂碼 —— mysql 中文亂碼

查詢:

Spring Boot 中文亂碼 —— mysql 中文亂碼

成功!!!

修改以後,再次建立資料庫,或建表的預設編碼都将是utf8。

繼續閱讀