[Hibernate]hibernate自动建表采用UTF-8字符编码

一、问题:

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&amp;characterEncoding=utf8

注:报错 The reference to entity "characterEncoding" must end with the ';' delimiter

在xml中不能直接写&,这是由xml文件中的编码规则决定要这么变换。

在xml文件中有以下几类字符要进行转义替换:

原文替换
&lt;< 小于号
&gt;> 大于号
&amp;& 和
&apos;’ 单引号
&quot;” 双引号

注:再补充下 Hibernate中的数据库方言

数据库方言(Dialect)
DB2org.hibernate.dialect.DB2Dialect
DB2 AS/400org.hibernate.dialect.DB2400Dialect
DB2 OS390org.hibernate.dialect.DB2390Dialect
PostgreSQLorg.hibernate.dialect.PostgreSQLDialect
MySQL5org.hibernate.dialect.MySQL5Dialect
MySQL5 with InnoDBorg.hibernate.dialect.MySQL5InnoDBDialect
MySQL with MyISAMorg.hibernate.dialect.MySQLMyISAMDialect
Oracle(any version)org.hibernate.dialect.OracleDialect
Oracle 9iorg.hibernate.dialect.Oracle9iDialect
Oracle 10gorg.hibernate.dialect.Oracle10gDialect
Oracle 11gorg.hibernate.dialect.Oracle10gDialect
Sybaseorg.hibernate.dialect.SybaseASE15Dialect
Sybase Anywhereorg.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server 2000org.hibernate.dialect.SQLServerDialect
Microsoft SQL Server 2005org.hibernate.dialect.SQLServer2005Dialect
Microsoft SQL Server 2008org.hibernate.dialect.SQLServer2008Dialect
SAP DBorg.hibernate.dialect.SAPDBDialect
Informixorg.hibernate.dialect.InformixDialect
HypersonicSQLorg.hibernate.dialect.HSQLDialect
H2 Databaseorg.hibernate.dialect.H2Dialect
Ingresorg.hibernate.dialect.IngresDialect
Progressorg.hibernate.dialect.ProgressDialect
Mckoi SQLorg.hibernate.dialect.MckoiDialect
Interbaseorg.hibernate.dialect.InterbaseDialect
Pointbaseorg.hibernate.dialect.PointbaseDialect
FrontBaseorg.hibernate.dialect.FrontbaseDialect
Firebirdorg.hibernate.dialect.FirebirdDialect
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值