spring+hibernage+mysql中文持久化问题

      在用spring+hibernate开发网站的过程中,发现一个很奇怪的问题:持久化中文的时候老是会出错。在网上查询过很多解决方法,大致有一下几种:

1.在mysql的配置文件my.ini中配置defualt_character_set为utf8,共有两处配置需要修改,默认是Latin1,完成。

2.在连接数据库的URL中要附加参数,如:jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf-8,完成。

    做完这些后,重启mysql后再进行单元测试,还是抛异常:

javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not insert:

Caused by: org.hibernate.exception.GenericJDBCException: could not insert: [cn.itcast.bean.product.ProductType]

Caused by: java.sql.SQLException: Incorrect string value: '/xE8/xB6/xB3/xE7/x90/x83' for column 'name' at row 1

        然后用工具查看数据库表,发现已经创建了表,那么就只是插入的问题了。再看数据表的编码,竟然仍然是latin1,难道URL的参数没有起作用吗?还是mysql根本就不支持utf-8呢?

      为了搞清楚上述问题,打开mysql的控制台,用输命令的方式创建一个数据表,并指定编码类型:

Create table tablename(
id int(10) unsigned NOT NULL AUTO_INCREMENT,
name varchar(15) NOT NULL default '',
PRIMARY KEY  (id)
) TYPE=MyISAM DEFAULT CHARACTER SET utr8;

创建完成后在工具中查看,发现数据库的编码是utf8了,窃喜。然后再运行单元测试。由于在配置文件中配置了<property name="hibernate.hbm2ddl.auto" value="update"/>,这次访问的时候就不用在创建新表了,只是在已有表上进行更新。终于,持久化中文成功了。在工具中查看data,也赫然显示的中文。那么问题就聚焦在,是在URL中附带参数没有起到作用,导致创建的数据表的编码仍然是latin1,所以无法插入中文数据。具体为什么URL的参数没有起到作用,还没有搞清楚,困惑中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值