JAVA培训
位置:首页Java开发开源框架
 问题状态
 
Hibernate为什么会出现中文乱码
 悬赏分:10  
 Hibernate为什么会出现中文乱码 
我跟着李老师把Hibernate的例子做了,不同的是我用的是MySQL数据库.
但是当插入数据到数据库中的时候就发现插入的中文成了乱码.而且再利用HQL查询出来的时候也是乱码.
我向问下各位高手是hibernate的问题还是mysql的问题啊.究竟问题出在那里谢谢各位了!
(我用mysql的时候用标准sql语句插入的时候不是乱码)
提问者:gojava123@163.com  - 头衔:高级软件工程师   
    
    
 回复答案 共22条
        哎哟, 肯定是你安装数据库的时候,没有选择可以支持中文的字符集编码啦。。。UTF-8,GBK,GB-2312都是可以滴。
     
    回答者:107001211@qq.com  - 头衔:开发爱好者 2008-11-5 12:20:31  

  需要在hibernate的配置文件中添加一个属性,(这里使用了spring的IOC容器来注入)
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.query.factory_class">
     ${hibernate.query.factory_class}<!--添加这个属性就可以了-->
    </prop>
........................
</property>
   org.hibernate.hql.classic.ClassicQueryTranslatorFactory
原因时hibernate在把hql转换成sql语句的时候,出现了乱码(如果有中文的话),按以上的配置的话,就没有什么问题了。还有一个方法就是,使用预编译的hql,然后动态绑定参数。不过这个方法是针对这一个函数本省而言的,如果你是使用Hibernate3而很多查询涉及中文的话,最好使用配置文件的方式,简单。 
    回答者:luyougong@sohu.com  - 头衔:开发爱好者 2008-7-25 10:37:25  

  第1.myqsql问题:你改一下my.ini 两个default-character-set gbk或gb2312.
第2.你写一个过滤器.解决乱码.
第3.建表时加上这句ENGINE = INNODB DEFAULT CHARACTER SET GBK;->设置引擎为innodb ,默认字符集为GBK 
有了这三项保证没问题。
CREATE TABLE [TABLE]
(
        ID                     INT(11)       AUTO_INCREMENT,        自动增长列
        [DATETIME]       TIMESTAMP                                   时间类型默认值
        PRIMARY KEY(ID)                                                   主键
)ENGINE = INNODB DEFAULT CHARACTER SET GBK;->设置引擎为innodb ,默认字符集为GBK
    回答者:you.bird@Hotmail.com  - 头衔:开发爱好者 2008-6-11 21:18:39  

  乱码问题主要是要找到中间传值的对象,一般的情况是对这个对象进行处理就OK了。
    回答者:xushuaijiale@163.com  - 头衔:开发爱好者 2008-5-23 1:14:42  

  采用Filter过滤器就可以解决,你可以去看看李教师的过滤器教程嘛,过滤中文乱吗
    回答者:gyjmail@qq.com  - 头衔:开发爱好者 2008-2-24 19:48:31  

  应该是mysql的问题.
首先你要确定你安装mysql的时候你的mysql是否支持中文字符.安装的时候设置成UTF-8,如果你忘了设置.在mysql的安装目录里面的my.ini文件,打开并修改它.有两处需要修改.属性都是default-character-set,你把值设置成UTF-8就行了.这样你的mysql支持中文字符集了.
然后,你建库的时候要把数据库的字符集设置成UTF-8的.你刚才那两处改了以后建库默认的就是UTF-8的了.数据库的字符集改好了,你建表的时候也要设置成UTF-8的.表建好了,你的字段也是设置成UTF-8的.
现在你的mysql没问题了,剩下的就是代码问题了.
你如果是web开发的话.首先建立一个过滤器,里面的request和response的字符集全部设置成UTF-8的.然后你的JSP页面也设置成UTF-8的.
现在差不多了,如果你插入的中文还是?的话,那可能就是楼主你RP问题了.
    回答者:dmewy213@gmail.com  - 头衔:开发爱好者 2008-1-29 22:36:26  

  Hibernate有这方面的问题,但我用的就没问题,最大可能是你的Mysql问题。修改my.ini文件。有两个字符集设置的地方,设置统一的就可以了。
    回答者:wf1337@gmail.com  - 头衔:开发爱好者 2007-12-3 11:35:31  

  乱码主要是字符集没有统一设置,你将MySQL数据库的字符集设置为utf-8,用过滤器将所有请求设置为utf-8,Jsp页面设置为utf-8,就没有乱码问题了.
    回答者:wtg2003080310@163.com  - 头衔:开发爱好者 2007-10-15 12:09:52  

  主要是这里:
jdbc:mysql://127.0.0.1:3306/bbs?useUnicode=true&characterEncoding=UTF-8
你试试,我连接数据地址就是这么写的,可以解决乱码问题。
    回答者:zzhhaaoojjuunn55@163.com  - 头衔:开发爱好者 2007-10-2 15:41:52  

  配置一下mysql服务器,把字符集改为:gbk....
    回答者:server_06@163.com  - 头衔:开发爱好者 2007-9-2 21:55:47  

  xushisongbaobao@163.com 的回答正确
    回答者:hemingwang0902@126.com  - 头衔:软件工程师 2007-8-21 14:27:59  

  第1.myqsql问题:你改一下my.ini 两个default-character-set gbk或gb2312.
第2.你写一个过滤器.解决乱码.
    回答者:xushisongbaobao@163.com  - 头衔:开发爱好者 2007-8-14 18:37:03  

  应该是mysql的问题,在mysql数据库中默认的编码是ISO8859-1,在连接数据库的时候,应该把它转成gb2312
    回答者:loyoveui@126.com  - 头衔:开发爱好者 2007-8-3 17:29:23  

  如果是MS SERVER 2000要怎么改啊
    回答者:sskwfnihc@163.com  - 头衔:开发爱好者 2007-7-19 7:41:22  

  先检查存入数据库之前是否正常,
在就是HQL语句中不要有可能是中文的变量以"+n+"的形式的变量,
要用Query的set方法设置值。
再就有可能是数据库的字符集的问题了
    回答者:fanhaofan@163.com  - 头衔:开发爱好者 2007-7-18 21:19:59  

  你可以参考下这里:
<a href="http://blog.csdn.net/Morecans/archive/2007/07/15/1691860.aspx">java 中文乱码终极解决方案(斩草除根式消灭中文乱码恶魔)</a>
http://blog.csdn.net/Morecans/archive/2007/07/15/1691860.aspx
    回答者:leo.zheng1@163.com  - 头衔:开发爱好者 2007-7-15 22:44:30  

  如果安装MySql的时候没有设置默认字符集,mysql默认是拉丁文.就会出现乱码。解决办法:
  打开配置文件,如 一般在c:\windows\my.ini(如果是mysql5的话可能在安装目录下),在里边找到类似(说类似是因为时间长忘记了,呵呵!)
  default-character-set=gbk(mysql默认是latin1)这样的语句,把他们全设置成gbk,保存,然后重启 mysql server 。 
     注意 gbk 要小写,不然 mysql可能启动不了。
如果页面提取出现乱码,设置characterEncoding就行了。
    回答者:ximing1107@163.com  - 头衔:开发爱好者 2007-6-27 18:21:35  

  进入bin目录找到一个MySQLInstanceConfig.exe文件运行。重新设置以下。注意最后一个字符集选择。选择自定义gb2312就可以了。中文就不会出现问题,这样设置比较安全方便,以后就不用在重新设置了
    回答者:dalianxiaolaohu@sina.com  - 头衔:开发爱好者 2007-6-21 20:03:53  

  mysql字符集的问题
    回答者:zjielove@qq.com  - 头衔:开发爱好者 2007-6-12 13:59:54  

  javachinese@126.com 
你是谁啊,你给的答案是我在MLDN论坛上给别人做答的答案。。。
Hibernate出现乱码,还有可能就是数据库的原因,字符集应该一致,看看你的MYSQL的字符集~ 
祝好运~~~
    回答者:hellojazz@163.com  - 头衔:开发爱好者 2007-6-12 13:42:11  

  javachinese@126.com 
你是谁啊,这是我在MLDN论坛上给别人做答的答案。。。
Hibernate出现乱码,还有可能就是数据库的原因,字符集应该一致,看看你的MYSQL的字符集~ 
祝好运~~~
    回答者:hellojazz@163.com  - 头衔:开发爱好者 2007-6-12 13:33:54  

  回复 
一般来说应该是MYSQL的问题,给你贴一个我写的连接MYSQL的类,希望对你有所帮助。

 package com.perld.sjz.dbc ;

import java.sql.* ;

public class DataBaseConnection 
{
 private final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
 private final String DBURL = "jdbc:mysql://localhost/mybbs?user=root&password=hellosjz&useUnicode=true&characterEncoding=gb2312" ;
 private Connection conn = null ;
 
 public DataBaseConnection()
 {
  try 
  {
   Class.forName(DBDRIVER).newInstance() ;
   this.conn = DriverManager.getConnection(DBURL) ;
  } 
  catch (Exception e)
  {

  }  
 }
 
 public Connection getConnection()
 {
  return this.conn ;
 }
 
 public void close()
 {
  try 
  {
   this.conn.close() ;
  }
  catch (SQLException e) 
  {
  }
 }
}
    回答者:javachinese@126.com  - 头衔:初级程序员 2007-4-16 18:27:04  

我的回答:
回答即可得10分,被采纳则可得50分+悬赏分。
  验证码

 
 
最新问题
欢迎使用本系统,智囊团。踊跃回答,赢得积分。

使用有问题请到 帮助
 
关于我们 | 商务合作 | 招聘信息 | 客服中心 | 服务条款 | 免责声明 | 网站导航 |java培训QQ留言
Copyright 2007 zhinangtuan.net.cn all rights reserved 版权所有