现在的位置: 首页 > 综合 > 正文

使用Hibernate向MySQL存储中文字符数据

2014年08月29日 ⁄ 综合 ⁄ 共 1504字 ⁄ 字号 评论关闭

使用Hibernate向MySQL存储中文字符数据时出现了乱码,从MySQL取出数据时显示的是???,下面做下笔记说下解决方法:

1.打开MySQL安装目录下的my.ini文件,将字符集修改为gbk:



2.打开项目的hibernate.cfg.xml文件,在配置数据库url时加上编码参数:

<property name="connection.url">jdbc:mysql://localhost/hibernate?useUnicode=true&amp;characterEncoding=gbk</property>

注意上面的"&amp;"必不可少,在HTML中表示&的转义字符。

又例如,在HTML中空格转义字符是"&nbsp;"


3.删除MySQL中的数据库hibernate。因为之前修改mysql的字符集前可能已经新建该数据库,此时hibernate的字符集可能是utf-8或者latin1,与我们重设的gbk不一致,所以要删除该数据库。

方法:

drop database hibernate;


4.重启mysql,回到cmd路径,输入命令:

net stop mysql

net start mysql

5.在MySQL中创建hibernate数据库:

create database hibernate;

6.再在程序中向数据库写入中文数据,部分测试代码如下:

//打开线程安全的session对象
Session session = HibernateUtil.currentSession();
//打开事务
Transaction tx = session.beginTransaction();
//创建Person对象
Person xiaoming = new Person();
//为Person对象设置属性
xiaoming.setAge(19);
xiaoming.setName("小明");
//创建List集合
List<String> schools = new ArrayList<String>();
schools.add("小学");
schools.add("中学");
//设置List集合属性
xiaoming.setSchools(schools);
session.save(xiaoming);
tx.commit();
HibernateUtil.closeSession();

取出数据,在控制台打印查看结果:

Person p2 = (Person)session.get(Person.class, 1);
System.out.println(p2.getSchools().get(0));


运行结果:

1.数据库中存储内容如下:



2.控制台输出如下:

Hibernate: 
    select
        person0_.person_id as person1_0_0_,
        person0_.name as name0_0_,
        person0_.age as age0_0_ 
    from
        person_inf person0_ 
    where
        person0_.person_id=?
Hibernate: 
    select
        schools0_.person_id as person1_0_0_,
        schools0_.school_name as school2_0_,
        schools0_.list_order as list3_0_ 
    from
        school schools0_ 
    where
        schools0_.person_id=?
小学

最后说一下个人感想:使用mysql存储数据,像我们这些初学者必须花费一些时间(个人认为是无谓的)和字符集作斗争是一件让我无法容忍的事,开发者居然因此而不能更加专注于自己的程序部分,真的是太麻烦了。


抱歉!评论已关闭.