解决:Hibernate 向Mysql插入中文数据乱码,出现???


刚开始,用hibernate,好不容易插入Mysql成功了,却发现中文乱码,搜索了半天,解决了问题,记录一下。


hibernate插入mysql数据库出现中文乱码需要向两个方面检查,

其一:mysql数据库的配置,看看你建立的表里面相应的字段是否utf-8字符编码,如果不是,将相应字段的字符编码改为utf8;也可以在my.ini文件里更改默认的字符配置,默认是latin,我们需要改为utf-8(这样就不需要设置字段的编码了,默认utf8)。设置default-character-set属性有两个,一个在[mysql]下面,另外一个在[mysqld]下面。如:default-character-set = utf8(注意:这里写utf8,而不是utf-8)。

如果完成了这一步,最起码你直接操作mysql数据库(即在命令行增添数据,而不是用hibernate添加数据)是可以显示中文字符的,但是如果你一旦用hibernate添加中文数据,就出现乱码的话,那就还需要配置hibernate相应设置,这就是下面其二里所探讨的问题。

其二:如果还不行,就需要更改hibernate里的hibernate.cfg.xml文件,在连接mysql数据库的url路径的后面添加

<span style="color:#ff0000;">?useUnicode=true&amp;characterEncoding=utf-8</span>
字符编码。具体设置是hibernate.cfg.xml中标记为红的部分。

我的hibernate.cfg.xml设置如下:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
     
<hibernate-configuration>
    <session-factory>
     
    <!-- Database connection settings -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
	<!--链接本地test数据库,并设置utf-8编码-->
    <property name="connection.url">jdbc:mysql://localhost/test?useUnicode=true&amp;characterEncoding=utf-8</property>
    <property name="connection.username">root</property>
    <property name="connection.password">dfy</property>
         
    <!-- JDBC connection pool (use the built-in) -->
    <!-- <property name="connection.pool_size">1</property> -->
         
    <!-- SQL dialect -->
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
         
    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>
         
    <!-- Enable Hibernate's automatic session context management -->
    <!--<property name="current_session_context_class">thread</property>-->
         
    <!-- Drop and re-create the database schema on startup -->
    <!-- <property name="hbm2ddl.auto">create</property> -->
         
    <!-- Disable the second-level cache -->
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
     
   
    <mapping resource="com/dfy/po/Student.hbm.xml"/>
    <mapping class="com.dfy.po.Teacher"/>
         
    </session-factory>
</hibernate-configuration>


据说在hibernate.cfg.xml里这样设置也可以:

<span style="font-size:18px;"><property name="hibernate.connection.url">
        <![CDATA[jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8]]>
</property></span>
这里的test是我在mysql里建立的数据库,你可以改为你自己的数据库名字,其他不变。





你可能感兴趣的:(解决:Hibernate 向Mysql插入中文数据乱码,出现???)