2009-11-23 86 views
2

我在生产中有一个db,其中所有的表都使用utf8/utf8_general_ci编码。这基本上工作正常,除了在一种情况下。UTF8 - 休眠/ MySQL奇怪

会发生什么事?正在返回一些字符(中国等);但是,它们也可以通过不同的标准正确返回相同的表格。

我已经从Hibernate到MySQL检查了连接参数,他们有很好的字符集。

我不明白这是怎么发生的。返回坏字符的标准仅仅是一个简单的findById:

Criteria criteria = getHibernateSession().createCriteria(CalendarEvent.class); 
criteria.add(Restrictions.eq("id", id)); 
return (CalendarEvent) criteria.uniqueResult(); 

这在生产仅发生在Solaris上 - 我无法在本地重现。

+0

那么我们仍然有问题。这些都没有帮助 – wjp 2009-11-26 12:02:21

回答

3

在您的连接字符串你试过

jdbc:mysql://localhost/dbname?characterEncoding=utf8

或添加JVM参数-Dfile.encoding=utf-8启动应用/服务器时

+0

是的,我们已经有 – wjp 2009-11-23 13:22:51

+0

检查我的更新 – Bozho 2009-11-23 13:43:18

+0

感谢Bozho,但我没有看到VM文件编码如何影响休眠(我会尽力) – wjp 2009-11-23 13:48:56

2

尝试在Hibernate配置文件中设置以下属性:

<property name="hibernate.connection.useUnicode">true</property> 
<property name="hibernate.connection.characterEncoding">UTF-8</property> 
<property name="hibernate.connection.charSet">UTF-8</property> 
+0

嗯,我们没有useUnicode之一(我们做的其他人)。我会尝试。 – wjp 2009-11-23 13:59:30