今天在测试时遇到了一个问题,向服务器发送一条往数据库中插入中文的请求后,再发送查询请求后,得到的是乱码。下面展示错误:
向服务器发送插入请求(使用postman):
再次查询,得到乱码
起初我认为是,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。