hibernate使用mysql创建表指定utf-8字符集

由于项目是采用utf-8的,之前也没留意过,一般要求客户也是把mysql的编码集设置成utf-8。可现在出问题了,某客户使用的数据库是非utf-8的,项目是hibernate自动创建数据库的,所以在项目程序中插入中文数据乱码。


模拟该环境,修改mysql的默认字符集为latin1


解决方法:

hibernate.properties 中的dataSource.url后面加上&useUnicode=true&characterEncoding=utf8

注:spring或者hibernate.cfg.xml配置类似,不详细举例


测试发现,此方法程序运行插入数据结果抛出异常,追踪异常发现是乱码的问题,导致sql语句不能执行。

ok,有点思路了,我连接之前的数据库或者导出utf-8的数据库再导入进来,此方法连接没有问题,插入数据也不会乱码,所以猜想是hibernate创建表的时候没有指定utf-8编码。


既然是这样,重写下MySQL5InnoDBDialect然后在配置文件中指定该方言呗。


继续解决:

package dialect;

import org.hibernate.dialect.MySQL5InnoDBDialect;


/** 
 * 
 * Extends MySQL5InnoDBDialect and sets the default charset to be UTF-8 
 * @author Sorin Postelnicu 
 * @since Aug 13, 2007 
 */
public class CustomMysqlDialect extends MySQL5InnoDBDialect {
    public String getTableTypeString() {
        return " ENGINE=InnoDB DEFAULT CHARSET=utf8";
    }
}

然后修改hibernate.properties中的dataSource.dialect

dataSource.dialect=dialect.CustomMysqlDialect

同样,dataSource.url后面也要加上&useUnicode=true&characterEncoding=utf8


ok,让hibernate重新建个数据库吧,重启下项目。问题解决~


原文链接:http://blog.tremend.ro/2007/08/14/how-to-set-the-default-charset-to-utf-8-for-create-table-when-using-hibernate-with-java-persistence-annotations/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值