一般的问题是我有两个mysql5db。一个在我正在开发的windows机器上,另一个在远程linux(ubuntu)服务器上。
我在用Spring/冬眠做一个胖jar。
在本地机器和本地mysql数据库上一切正常。我使用jsoup解析一些web页面,并将结果存储在数据库中,数据使用波兰编码存储,例如:“sprzeda”ż 华沙,ż“波托卡,奥利博兹”
在linux服务器上同样是:“sprzeda?华沙,波托卡,奥利博兹
两个数据库具有相同的排序规则:utf8\u unicode\u ci
列是varchar。
在两个数据库上运行sql时:
从information\u schema.tables中选择distinct c.collation\u name,t.table\u name作为t,information\u schema。 collation_character_set_applicability
作为c,其中c.collation_name=t.table_collation和t.table_schema=database();
我得到了相同的结果:排序规则是utf8\u unicode\u ci。
db字符串如下所示:jdbc:mysql://localhost/dbname?autoreconnect=true&useucode=true&createdatabaseifnotexist=true&characterencoding=utf-8
休眠配置如下:
@Bean
public SessionFactory sessionFactory() throws Exception {
LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource());
sessionFactoryBean.setPackagesToScan(new String[] { "x.domain" });
Properties hibernateProperties = new Properties();
hibernateProperties.put("hibernate.show_sql", false);
hibernateProperties.put("hibernate.bytecode.use_reflection_optimizer", false);
hibernateProperties.put("hibernate.check_nullability", false);
hibernateProperties.put("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect");
hibernateProperties.put("hibernate.search.autoregister_listeners", false);
hibernateProperties.put("hibernate.connection.CharSet", "utf8");
hibernateProperties.put("hibernate.connection.characterEncoding", "utf8");
hibernateProperties.put("hibernate.connection.useUnicode", true);
sessionFactoryBean.setHibernateProperties(hibernateProperties);
sessionFactoryBean.afterPropertiesSet();
return sessionFactoryBean.getObject();
}
我花了几个小时试图找到一个解决办法,不幸的是没有运气。我已经将排序规则改为utf8\u bin,更改了列排序规则、db strings、hibernate config等等。结果仍然是在linux服务器上得到“?”而不是波兰字符。我希望你能给我一些建议。谢谢你的阅读。
暂无答案!
目前还没有任何答案,快来回答吧!