今天在測試時遇到了一個問題,向伺服器發送一條往資料庫中插入中文的請求後,再發送查詢請求後,得到的是亂碼。下面展示錯誤:
向伺服器發送插入請求(使用postman):
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX6FkaOlXV61EMNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TN4gTOzczM3EjNxcDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
再次查詢,得到亂碼
起初我認為是,SpringBoot 配置出了問題,遂根據部落格spring boot 亂碼解決彙總,對項目進行了修改,然而并沒起作用。調試後發現,在執行資料庫操作之前,沒有出現亂碼,遂懷疑是資料庫編碼出現了問題。
登陸mysql資料庫,執行一條插入中文的語句
報錯,無法插入,執行語句
show variables like 'char%';
得到如下結果:
找到問題所在,我們需要将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,測試:發送插入請求:
查詢:
成功!!!
修改以後,再次建立資料庫,或建表的預設編碼都将是utf8。