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

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


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值