一、问题:
hibernate自动建表的编码应该是数据默认的编码格式,一般也不是utf-8。所以想要建表默认的编码是UTF-8,应该怎么做呢?
二、解决方法:
拿mysql举例:
(一)、修改hibernate建表的方言
1、一般情况我们使用的mysql方言为:org.hibernate.dialect.MySQL5Dialect
默认返回的是
@Override
public String getTableTypeString() {
return " ENGINE=InnoDB";
}
2、重写MySQL5InnoDBDialect类,覆盖getTableTypeString方法
(可以重新写一个包放我们的 新·MySQL5InnoDBDialect
package com.shawn.spring.hibernate.mysql;
import org.hibernate.dialect.MySQL5InnoDBDialect;
public class MySQL5DialectUTF8 extends MySQL5InnoDBDialect{
@Override
public String getTableTypeString() {
return " ENGINE=InnoDB DEFAULT CHARSET=utf8";
}
}
3、方言配置使用我们重写的类,配置如下:
(1)Jpa数据库连接配置:
把默认的配置
<property name="hibernate.dialect"value="org.hibernate.dialect.MySQL5Dialect" />
修改成:
<property name="hibernate.dialect" value="com.shawn.spring.hibernate.mysql.MySQL5DialectUTF8" />
2)spring整合hibernate配置:
<prop key="hibernate.dialect">com.shawn.spring.hibernate.mysql.MySQL5DialectUTF8</prop>
xml代码为:
<property name="jpaProperties">
<props>
<!-- 自动建表类型 validate|create|create-drop|update -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!-- 是否显示SQL -->
<prop key="hibernate.show_sql">false</prop>
<!-- 显示SQL是否格式化 -->
<prop key="hibernate.format_sql">false</prop>
<prop key="hibernate.dialect">com.lqy.spring.hibernate.mysql.MySQL5DialectUTF8</prop>
</props>
</property>
4、修改数据连接Url
同样,dataSource.url后面也要加上?useUnicode=true&characterEncoding=utf8
注:报错 The reference to entity “characterEncoding” must end with the ‘;’ delimiter
在xml中不能直接写&,这是由xml文件中的编码规则决定要这么变换。
在xml文件中有以下几类字符要进行转义替换:
原文 替换
< < 小于号
> > 大于号
& & 和
' ’ 单引号
" ” 双引号