项目部署在虚拟机Centos7上,
数据库采用的是mysql-5.7.36,
Tomcat的版本为apache-tomcat-9.0.56,
乱码问题的产生,使用Linux运行项目时,前端页面如果向数据库添加中文数据的时候,会出现乱码问题。
遇到这个问题之后我先是在网上搜了下类似的问题,解决的方法五花八门的,先用排除法。
先甩锅给项目本身:我把项目放到windows中的Tomcat里边运行,功能一切正常,并无乱码问题产生,经过测试,项目表示不背这个锅。
先前测试过windows下的Tomcat一切正常,所以锅到了Linux下的Tomcat手里。根据网上的一些说法,把conf下面的server.xml和web.xml的编码方式都加了UTF-8,重启服务器运行,并没什么用,问题也不是出在这里,乱码该发生还是得发生。
接着就剩下数据库了,一看,果然有问题,附上windows中的mysql对比图
(白色为Linux下的,黑色为windows下的)
首先有两个参数对不上,database和server的编码方式为数据库默认的,问题基本可以确定是出在这里了。
接着是解决办法,网上看到的文章大部分都指向了my.cnf这个文件,找了很久,未果。
查找结果如下:
[root@192 bin]# mysql --help | grep my.cnf
bash: mysql: command not found...
我于是又搜数据库没有my.cnf文件怎么办,类似的办法是自己建一个,然后再去找default.cnf文件,我又花时间找了一下,发现也没有找到。我不死心我又在网上找了蛮久,发现都是围绕这两个文件来解答的,不过还是有看到不同的解决办法的,就是在JDBC的url结尾加上?characterEncoding=UTF-8就行,我在配置文件中把这句话加了上去,然后重新打包,导入文件到Linux下运行,经过测试,进行数据库添加操作时,并没有中文乱码产生,所以这个方法是很直接很有效的,只要之后在配置文件中加上就行。
不过我还是倾向改数据库属性文件把问题解决,这样可以一了百了,所以之后我还会在尝试其他方法。
原博主博客