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

注:报错 The reference to entity “characterEncoding” must end with the ‘;’ delimiter

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

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

原文  替换
&lt;    < 小于号
&gt;    > 大于号
&amp;   & 和
&apos;  ’ 单引号
&quot;  ” 双引号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值