java使用c3p0连接mysql,写中文数据乱码的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java使用c3p0连接mysql,写中文数据乱码的问题相关的知识,希望对你有一定的参考价值。

此文说的乱码,是指所有中文的字符都变成了?。

首先,网上普遍搜索到的解决方案都是告诉你要在数据库连接字符串里面增加编码的定义,完整的连接字符串如下:

url="jdbc:mysql://127.0.0.1:3306/anydb?useUnicode=true&characterEncoding=UTF-8"

需要注意的是:这段字符串通常是保存在一段xml结构的配置文件中,比如环境变量文件context.xml中,更完整的配置内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="sqldb"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/anydb?useUnicode=true&amp;characterEncoding=UTF-8"
username="anyuser"
password="anypassword"
maxActive="50"
maxIdle="10"
maxWait="10000"/>

</Context>

于是问题来了,有的项目并不使用xml文件来配置数据库连接的,而是直接将配置写在文本文件中,比如config.properties,再由c3p0或dbcp的bean启动的时候去读取配置,这样一来,就不能用开头的那段字符串了,而需要修改成这样:

url=jdbc:mysql://127.0.0.1:3306/anydb?useUnicode=true&characterEncoding=UTF-8

仔细对比下,也就是把&amp;换成&,因为对&的转义只用在XML文件中,不恰当的转义会让编码定义失效,数据库操作中写入中文都变成???。

一个小问题,花了我半天时间才找到原因,为了避免大家在此问题上白花功夫,特意记录下。希望对你有用!

以上是关于java使用c3p0连接mysql,写中文数据乱码的问题的主要内容,如果未能解决你的问题,请参考以下文章

java连接mysql数据库乱码的解决方案

使用 c3p0 连接池丢失 MySQL 连接

Java连接mysql数据库并插入中文数据显示乱码

Hibernate c3p0 连接池不会超时空闲连接

C3P0 mysql 5.7

JDBC(c3p0)