前言
今天在用 SpringMVC 写 Demo 时遇到了中文乱码问题,前端的中文数据传递到 Controller 能够正常解析。但是到了数据库里面就成了 ??????
一堆的问号。在网上找了很多方法都没成功我就很纳闷,好在最后我通过尝试解决了问题。
一、问题分析
由于和在前几天在用 HttpServlet 那一套写代码时用的同一个数据库的同一张表,所以不是数据库的编码出问题了。而在 Controller 中能够正常解析,所以也不是 Tomcat 中的编码问题。那范围就很小了,配置数据源的时候可能出现了问题。
在没用 SpringMVC 的时候是通过 Mybatis 的 xml 文件配置的数据源
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="********"/>
</dataSource>
我想都没想直接把这个 Url 里面的值给复制然后粘贴到了 jdbc.properties 文件里面
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=********
这也没问题啊,可是我在测试接口时写回数据库的中文成了 ????
下面来看看到底是哪里出现了问题。
二、解决方法
很简单,那就是在 url 中直接写 & 符号,而不是用 &
去转义,这就涉及到 properties 文件书写的一些规范了(可自行查阅)。
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=********
总结
最后好在成功解决,遇到此类问题应该先去分析哪个环节出现了问题,再去多尝试就能解决问题。