如何使用hibernate生成UTF8表

时间:2017-01-27 21:47:01

标签: java spring hibernate

我使用的是hibernate版本:4.3.8.Final

在web.xml中我有: `                                                    

        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
        <property name="hibernate.validator.apply_to_ddl" value="true" />
        <property name="hibernate.connection.CharSet" value="utf8" />
        <property name="hibernate.connection.characterEncoding" value="utf8" />
        <property name="hibernate.connection.useUnicode" value="true" />

        <property name="connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/>
        <property name="hibernate.c3p0.min_size" value="5"/>
        <property name="hibernate.c3p0.max_size" value="20"/>
        <property name="hibernate.c3p0.timeout" value="300"/>
        <property name="hibernate.c3p0.max_statements" value="50"/>
        <property name="hibernate.c3p0.idle_test_period" value="300"/>`

当我运行app时,hibernate生成所有表:latin1_swedish_ci

我在google上阅读了很多页面,但没有任何帮助。

如何使用hibernate生成utf8表? 这是可能的吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果你检查org.hibernate.dialect.MySQL5InnoDBDialect实现,你会发现:

package org.hibernate.dialect;

/**
 * @author Gavin King, Scott Marlow
 */
public class MySQL5InnoDBDialect extends MySQL5Dialect {

    public boolean supportsCascadeDelete() {
        return true;
    }

    public String getTableTypeString() {
        return " ENGINE=InnoDB";
    }

    public boolean hasSelfReferentialForeignKeyBug() {
        return true;
    }

}

所以你可以在 getTableTypeString 中看到返回值,你可以做的是扩展 MySQLDialect 类并覆盖 getTableTypeString 方法返回< / p>

  

“ENGINE = InnoDB DEFAULT CHARSET = utf8”;

否则(您可以尝试一种懒惰的解决方案)尝试在数据库连接末尾添加UseUnicode=true&amp;characterEncoding=utf8网址