乱码问题
问题:
某次添加数据的时候突然发现数据某些新增数据出现???的情况,首先推测是肯定是某处编码不统一或者没有设置的原因,但编码的设置也有很多处。
分析:
首先先写一条新数据,然后通过浏览器的的请求包记录查看里面的信息,确保发送回来后端的信息技术没有问题的,当时我这是没有问题的,此处不做演示了。
然后数据去到数据库,就变成???问号,而且当输入相同数量问号会显示???已存在 ,当时就觉得很迷惑,这个意思肯定就是数据到数据库之前或者之后就已经变成???然后和数据库相同长度的???匹配了所以返回相同。
因此我们要先看是不是IDEA或者控制器的编码格式问题,
IDEA编码设置
发现没啥问题,就继续去看代码处理部分,我这后端没啥问题就没得检查了,如果你们是使用比较原始的Servlet那类的request response要注意有没有set编码。也可以在新增方法中打一个断点,看看传进来的数据是否正常。
也没问题的话,就到数据库部分了,通常会直接去看数据库的编码格式或者建表语句中编码格式,但我的问题是之前没有问题,后面就出现了编码问题,所以排除了建表编码和数据库编码,但此处还是讲一下如何查看吧。
在IDEA中打开database,然后选中其中一个数据库右键打开可以直接查看
然后就是数据库的建表语句了,建议用Navicat去查看,不仅打开方便,还可以更改的方便
选择对应的数据库,查看建的数据库库
SHOW CREATE DATABASE <数据库名>;
查看建表中的编码格式,也没啥问题
SHOW CREATE TABLE <表名>;
检查到有问题的到navicat上改即可
最后面发现个很逆天也很容易被疏忽的问题,在配置中我当时就是忘了后面这个编码设置而导致数据传入数据库就开始有问题了,至此乱码的问题就解决了。
(首先这个项目是用到了读写分离)到后面,我发现我的新增的数据在数据库没有问题但是出现了没有更新到前端去,后面打开两个虚拟机中的数据库查看数据发现读和写的两个数据库表对不上,意思就是两个表没有进行同步成功。以下就是读写分离重新同步两个数据库的方法