我使用的是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表? 这是可能的吗?
感谢您的帮助。
答案 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&characterEncoding=utf8
网址