最近做了一个小项目,使用c3p0来连接数据库,当更新数据库时,中文的数据竟然变成了乱码
什么鬼?开始检查问题!!!
1.查看jsp页面,已经设置成了pageEncoding="utf-8”。
jsp页面没问题
2.查看servlet,request,response均已经设置,好奇怪啊什么问题呢?
3.查看数据库默认的是gbk,查看是否设置编码utf-8
数据库属性:
4,。都没有问题,哪里出错了呢?,来测试一下
看到没中文是可以的!
来个测试类
更新成功了,可是数据库还是乱码那么问题只能出在数据库连接上了。
打开c3p0文件
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<!-- 指定连接数据源的基本属性 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///oldman</property>
<property name="user">root</property>
<property name="password">123456</property>
<!--扩展配置-->
<property name="checkoutTimeout">30000</property>
<property name="idleConnectionTestPeriod">30</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config>
</c3p0-config>
此处应该设置编码格式(表名后面加?以及
要使用&的转义字符也就是&,否则会报错):
<property name="jdbcUrl">jdbc:mysql:///oldman?useUnicode=true&characterEncoding=utf-8</property>
再来测试一下:
乱码没了,哈哈,终于解决了。
总结:
此局代码有何作用呢?
useUnicode=true&characterEncoding=utf-8
1.指定字符的编码、解码格式
例如:数据库采用gbk,项目数据库用的是utf-8
1.存数据时,数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。
2.取数据时,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。