我有UTF-8的mysql DB和用hibernate用java编写的应用程序。当我在eclipse中运行应用程序时,一切都很好。但是在不同机器上的生产中,从DB返回的值已损坏。 我打印值记录(在获取后立即),我清楚地看到我从DB获得的值在生产中被破坏。
对于这两种环境,数据库本身都是相同的数据库。这些值存储得很好。
任何想法可能是什么原因?
更新
我忘了说它有时会发生。我认为在50%的情况下,它可以正常工作。
更新2:
这是hibernate.cfg.xml:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://myDB:3306/myApp?autoReconnect=true&useUnicode=true&createDatabaseIfNotExist=true&characterEncoding=utf-8</property>
<property name="hibernate.connection.username">username</property>
<property name="hibernate.connection.password">password</property>
<!-- <property name="hibernate.connection.pool_size">10</property> -->
<property name="hibernate.connection.isolation">2</property>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.connection.provider_class">com.zaxxer.hikari.hibernate.HikariConnectionProvider</property>
<property name="hibernate.hikari.minimumIdle">5</property>
<property name="hibernate.hikari.maximumPoolSize">10</property>
<property name="hibernate.hikari.idleTimeout">30000</property>
<mapping class="someclass1"/>
<mapping class="someclass2"/>
<mapping class="someclass3"/>
<mapping class="someclass4"/>
</session-factory>
</hibernate-configuration>
答案 0 :(得分:0)
参考网址 https://docs.jboss.org/exojcr/1.12.13-GA/developer/en-US/html/ch-db-configuration-hibernate.html
请验证生产环境中的数据源配置是否正确设置了useUniCode和characterEncoding属性。
示例:
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/exodb?relaxAutoCommit=true&amp;autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>