mysql utf-8从一台机器返回乱码

时间:2016-02-25 14:17:44

标签: java mysql hibernate utf-8

我有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&amp;useUnicode=true&amp;createDatabaseIfNotExist=true&amp;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> 

1 个答案:

答案 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;amp;autoReconnect=true&amp;amp;useUnicode=true&amp;amp;characterEncoding=utf8"/>