UTF8 - Hibernate/MySQL 怪异
我在生产中有一个数据库,其中所有表都使用 utf8 / utf8_general_ci 编码。除了一种情况之外,这基本上工作正常。
发生什么事情了???正在返回某些字符(中文等);但是,对于同一个表,它们也会通过不同的标准正确返回。
我仔细检查了从 Hibernate 到 MySQL 的连接参数,它们具有良好的字符集集。
我无法理解这是怎么发生的。返回坏字符的标准只是一个简单的 findById:
Criteria criteria = getHibernateSession().createCriteria(CalendarEvent.class);
criteria.add(Restrictions.eq("id", id));
return (CalendarEvent) criteria.uniqueResult();
这只发生在 Solaris 的生产中 - 我无法在本地重现它。
I have a db in production where all of my tables are using utf8 / utf8_general_ci encoding. This is basically working fine except in one scenario.
What happens is that ??? are being returned for some characters (Chinese, etc); however, they are also returned correctly for the same table but via a different criteria.
I've double checked the connection parameters from Hibernate to MySQL and they have the good charset set.
I cannot understand how this can be happening. The criteria that returns the bad characters is just a simple findById:
Criteria criteria = getHibernateSession().createCriteria(CalendarEvent.class);
criteria.add(Restrictions.eq("id", id));
return (CalendarEvent) criteria.uniqueResult();
This is only happening in production on Solaris - I cannot reproduce it locally.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在您的连接字符串中,您是否尝试过
jdbc:mysql://localhost/dbname?characterEncoding=utf8
或在启动时添加 JVM 参数
-Dfile.encoding=utf-8
应用程序/服务器In your connection-string have you tried
jdbc:mysql://localhost/dbname?characterEncoding=utf8
or add JVM parameter
-Dfile.encoding=utf-8
when starting your application / server尝试在休眠配置文件中设置以下属性:
Try setting the following properties in your hibernate configuration file: