今天在一个web项目中遇到一个乱码问题,框架是ssm,数据库用的是MySQL,可是这个乱码问题比较奇葩,数据库里面存的中文取出来变成了问号,存进去的中文也变成了问号,可是手动添加到数据库中的中文取出来又是显示正常的。一路查了不少资料,终于解决了,而后加上本身的分析,整理了一下思路。mysql
乱码问题出现的状况有不少种,针对web开发这一流程来讲,能够根据数据的流向来定位乱码出现的位置。前台发起一个请求,数据经过http协议到后被接收,这里数据会进行一次编码,在ssm环境下,是springMVC来拦截请求进行处理,因此在springMVC中能配置数据的编码格式,springMVC提供的是一个filter,在web.xml中配置如下内容。web
<!-- 编码过滤器 --> <filter> <filter-name>springfilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>springfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
若是经springMVC拦截的中文参数没有出现乱码,则说明这里的编码没有出现问题,而后进一步去分析数据的流向。ssm的环境下是mybatis框架与数据库进行交互,mybatis自己对数据不会进行编码,可是在与数据库交互的时候会有编码的问题,好比在jdbc配置的时候,数据库链接这里有一个编码的参数须要配置。spring
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=UTF-8 username=root
若是以上的配置都肯定没有问题和,那么很大可能性就是数据库乱码了,在新建数据库的时候须要选择一个数据的编码方式。sql
这里若是也没有问题那就可能就我碰到的问题,数据库存的中文变成问号。在MySQL的安装目录(默认在C:\Program Files\MySQL\MySQL Server 5.x)修改my.ini能够解决。mysql中文显示乱码或者问号是由于选用的编码不对或者编码不一致形成的,我是经过修改my.ini配置文件解决了中文变问号的问题。5.7以后没有这个配置文件。shell
在[client]节点下添加 default-character-set=utf8 数据库
在[mysqld]节点下添加 (注:collation是排序方式)mybatis
character-set-server=utf8 collation-server=utf8_general_ci
修改完my.ini文件后,须要重启MySQL服务,在cmd中输入如下命令能够启动或关闭MySQL的服务,也能够在任务管理器--->服务 中手动关闭或开启。app
关闭服务 net stop mysql框架
开启服务 net start mysql编码
最后能够登陆MySQL看看配置是否成功。
输入 mysql -u root -p 进入mysql数据库,若是输入这个命令显示MySQL不是一个命令,须要把MySQL安装目录下的bin 这个路径配到环境变量中去,就可使用这个命令登陆MySQL。
输入密码:**
而后查看MySQL数据库的编码格式。
#显示编码格式 show variables like 'char%';
若是都显示为utf-8则为配置成功。