JDBC和Hibernate中文乱码

问题由来:

1.使用Struts2加JDBC的后台,MySQL进行CURD时发现中文乱码.

2.学习Hibenate时发现往MySQL中插入数据还是会乱码,且配置和JDBC有点不同


首先配置将开发工具都设置为UTF-8编码,毕竟UTF-8称为万国码

  • eclipse中设置编码Window->Preferences->General->Workspace
    这里写图片描述

PS:建议建议文件的行分隔符用unix(Linux)版本


  • 我使用的是Navicat for MySQL,所以新建数据库的时候使用UTF-8编码,排序规则自己根据需要选择.
    这里写图片描述
  • 创建表时,如果字段是char,varchar,text等类型时,也要使用utf-8
    这里写图片描述

  • 在命令行创建库时,使用如下命令设置编码
CREATE DATABASE `test2` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
  • 创建数据表时
CREATE TABLE `t_job` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(60) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

  1. 解决JDBC中文乱码的问题
private static final String DBDRIVER = "com.mysql.jdbc.Driver";
    private static final String DBURL = 
            "jdbc:mysql://localhost:3306/teacher?useUnicode=true&characterEncoding=UTF-8";
    private static final String DBUSER = "root";
    private static final String DBPASS = "";

我是将对数据库的操作都封装成一个工具类,因为配置信息都是字符串类型,所以在DBURL中必须要加上
?useUnicode=true&characterEncoding=UTF-8 才能解决中文乱码的问题,如果你的配置不是在java文件中,而是在XML文件中,那么你需要下面Hibernate的解决方案!


PS:在做课程设计时有一个诡异的表单中依然发现这样设置还是无法解决,只能使用了一个终极的解决方法:

String content = new String(content.getBytes("iso-8859-1"),"utf-8");//content是form表单中一个text类型的input

在Hibenate中的解决办法
开发工具的基本配置依然如上

  • 在hibernate.cfg.xml配置文件中,URL的配置如下
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf8
</property>

或者

<property name="hibernate.connection.url">
  <![CDATA[jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8]]>
   </property>

区别在于,如果在XML中写& 的时候,会被XML解析器解析为其他符号参照W3School对XML的解释
在XML中:< 和 & 都会被XML解析器解析,无法成为一个完整的字符串(String),所以有以上两种解决方法!


PS在对java操作SQL时URL的配置一定要区分是在XML文件还是在java文件中,如果在java文件中直接可以写&和<.
如果在XML中配置,&和<都需要转换成实体引用或使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值