刚开始,用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&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&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里建立的数据库,你可以改为你自己的数据库名字,其他不变。