Hibernate配置文件中指定MySQL数据库的编码方式:
配置端主要有两种方案:
1)
<hibernate-configuration>
<session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/yourDateBase?useUnicode=true&characterEncoding=utf-8
</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">con</property>
<mapping resource="com/hib/entity/Mytable.hbm.xml" />
</session-factory>
2)
<hibernate-configuration>
<session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/yourDatebase
</property>
</hibernate-configuration><property name="connectio.useUnicode">true</property>
<property name="connection.characterEncoding">utf-8</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">con</property>
<mapping resource="com/hib/entity/Mytable.hbm.xml" />
</session-factory>
1. 修改my.ini文件
[mysql]
default-character-set=utf8
说明:修改链接字符集和校对规则,它会同时设置character_set_client, character_set_connection, character_set_results。
也可以修改
[mysqld]
default-character-set=utf8
说明: 这里修改的是服务器的字符集和校对规则。
查看当前服务器的字符集和校对规则:
mysql> show variables like 'character_set_server';
mysql> show variables like 'collation_server';
2. 修改数据库和表的字符集和校队规则。
例如:
-- Create Database.
drop database if exists HRDB;
create database HRDB DEFAULT CHARACTER SET utf8;
use HRDB;
-- 角色表
create table HR_ROLE (
ID bigint not null auto_increment,
NAME varchar(20) not null unique,
primary key (ID)
) ENGINE=INNODB DEFAULT CHARACTER SET utf8;
查看当前数据库的字符集和校对规则:
mysql> show variables like 'character_set_database';
mysql> show variables like 'collation_database';
查看表的字符集和校对规则:
mysql> show create table HR_ROLE \G;
二、Hibernate端
1. 修改 hibernate.cfg.xml文件。
增加:
<!-- Supported UTF-8 character set -->
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">UTF-8</property>
乱码问题:
数据库是MySql,存储的是中文的内容用MySql Command Line Client 查看是乱码,但是用MySql Administrator查看却显示正确。
MySQL的安装目录下有个配置文件my.ini ,里面有客户端和服务器端的编码方式的设置。
你在服务端的默认编码设置为UTF8,那么存储数据都是采用UTF8的方式,这是对的,但如果要从MySql Command Line Client来查看数据,也就是客户端了,如果客户端设置的默认编码也是UTF8那么就会出现乱码的,所以将客户端的默认编码修改为gbk就可以了,不影响数据存储采用的编码,只是在我们用MySql Command Line Client查看数据时返回给我们转成gbk的编码的中文。
这样再不需要每次都 set names "gbk" 了。
具体的设置如下:
my.ini 中:
客户端的:
[client]
port=3306
[mysql]
default-character-set=gbk
服务端的:
[mysqld]
# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=utf8