解决Hibernate配置utf8却创建latin字符集的表

来源:互联网 发布:linux u盘 删除分区表 编辑:程序博客网 时间:2024/06/01 23:31

原文链接: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/

问题描述:在hibernate.properties中的url后面已经加了&useUnicode=true&characterEncoding=utf8,但是自动创建的表依然是latin字符集的,且中文插入是乱码。


解决方法:

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重新建个数据库吧,重启下项目。问题解决~



0 0