问题描述
近期修改一个学生信息管理的JavaWeb项目,其数据库连接池使用了C3P0。在实际测试时,发现在学生信息模块添加中文学生信息会在数据库(MySQL)出现中文乱码问题。
如图所示:
问题分析
如果在Application本身数据不存在中文乱码的前提下,那么存在以下两种可能(严格来说是一种):
- 数据库字符集问题导致
- Application连接时没有指定字符集导致
首先,我想到了是不是数据库字符集的问题,但我在数据库查看字符集的设置信息时,并没有发现问题。
如图:
当然如果你在查看你的数据库字符集时发现存在不支持中文的字符集时,可以参考博文:https://blog.csdn.net/weixin_43670802/article/details/95230263 进行字符集修改。
那么肯定是连接时没有指定字符集所致了。
问题解决
在JDBC URL 后面加上字符集参数即可。
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/ssms?useUnicode=true&characterEncoding=UTF-8</property>
<property name="user">root</property>
<property name="password">xxxx</property>
</default-config>
</c3p0-config>
注意
C3P0连接池的配置文件为XML
文件,所以某些特殊字符并不能直接键入,需要转义。
在上述的JDBC URL中,需要特别注意键入的是&
而不是&
。