天天看点

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。

继续阅读