作者:mobiledu2502872733 | 来源:互联网 | 2023-07-16 14:32
问题描述:
项目通过Maven打成war包传输到Linux上,SQL导出数据和结构后在Linux上的Mysql执行,数据都能正常显示,项目也是正常的访问到了index.html,一切显得毫无问题。
开始测试项目各个功能是否有异常,当我检查到我的模糊查询的时候发现输入中文查询不出结果,输入数字可以查出结果,打开Tomcat实时日志看到中文参数并没有乱码,那么可能是数据库的问题,通过注册功能插入了一条数据,检查数据库,果然:一个中文汉字变成了一个?
![在这里插入图片描述](https://img6.php1.cn/3cdc5/9c7e/243/88929b9f79504f5a.png)
直接insert一条语句试试
![在这里插入图片描述](https://img6.php1.cn/3cdc5/9c7e/243/7155d9a76a4e6116.png)
是正常的,也就是说我SQL语句插入没有问题,Tomcat日志打印的中文参数也没有乱码,有点诡异。
解决办法:
首先字符乱码的情况有很多,比如字符的编码方式和解码方式不一致会导致乱码而不是问号,而有的字符集本身就不支持中文,首先要检查自己编码方式,而我的问题就是出在Linux上MySql的配置问题。
执行
show variables like 'char%';
![在这里插入图片描述](https://img6.php1.cn/3cdc5/9c7e/243/8e99486c2ddc2c65.png)
character_set_client 和 character_set_server 默认都是latin1(拉丁编码集),它对中文是不支持的。我这里是已经做了修改。
使用命令
vim /etc/my.cnf
在 [mysqld] 下添加:
character-set-server=utf8
collation-server=utf8_general_ci
![在这里插入图片描述](https://img6.php1.cn/3cdc5/9c7e/243/212868c32bd1ec6b.png)
最后再重启一下Mysql,搞定!