Hibernate2.1.6存储繁体中文到Oracle的问题

马行空牛耕田 2005-10-26 08:41:25
环境:Hibernate2.1.6 + websphere4.0.7 + Oracle8.1.6 + struts1.1
oracle已经设定为utf8,hibernate的配置文件里,也设置了
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">utf-8</property>

但是写到数据库里的东西总感觉不对

问题1、Oracel数据库表中的繁体中文字段应该是什么类型: 如果是NVarchar2,用hibernate save对象的时候会报出错误“character set mismatch”,用jdbc sql就没有问题; 如果是Varchar2呢,可以使用hibernate save,但是进去的数据感觉不对

问题2、从oracle取出数据来后,需要转成繁体去到页面显示吗
...全文
228 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
马行空牛耕田 2005-11-03
  • 打赏
  • 举报
回复
To mxlmwl
客户不同意改db,所以对于这个功能改用xml文件了,耽误我一个多星期,郁闷

但是也感谢各位给我这么多帮助(尤其是mxlmwl同志),再次表示深深的谢意!
祝大家工作顺利,天天开心,早日升官发财,不用做可怜的程序员。 ^_^!
马行空牛耕田 2005-11-02
  • 打赏
  • 举报
回复
终于在一个测试数据库上改了一把,将数据库字符集转成utf8,问题解决。 看来只将NLS_NCHAR_CHARACTERSET设置成utf8是没有作用的,关键是我的数据一到数据库,就被进行了转码: utf-8转成US7Ascii,造成了字节丢失,再将这种数据存到utf8的nvarchar2列里去,都没用,因为数据已经被破坏了。
mxlmwl 2005-11-02
  • 打赏
  • 举报
回复
呵呵,那就和客户反应呀,不要再做无用功了,或者打电话问问oracle技术支持。
马行空牛耕田 2005-10-31
  • 打赏
  • 举报
回复
UP一下,我认为现在拿到的数据已经是中文的utf8编码。 问题是:
数据库的字符集是ascii(记不清楚了,但肯定不是中文字符集,而是英文的)
但是数据库又设置了以下内容
NLS_NCHAR_CHARACTERSET
UTF8
意思是对于NChar或者NVarChar的内容采取utf8编码,只是数据库整体的仍然是英文编码。
不知道这有没有影响, 另外,jdbc驱动使用的是class12.zip
马行空牛耕田 2005-10-31
  • 打赏
  • 举报
回复
我顶一下,再次求助!
马行空牛耕田 2005-10-31
  • 打赏
  • 举报
回复
数据库的编码为: US7ASCII 。 问题是一方面我不知道它对应那种编码(ISO-8859 ?); 另外,我想它不是unicode,不是utf,繁体中文转成这种字符集肯定会丢失数据的。 唉!
mxlmwl 2005-10-31
  • 打赏
  • 举报
回复
这个我也不太清楚了,呵呵,我对oracle的使用仅限与此,至于具体是否可以象你那么做,恐怕真得去oracle论坛问问,或者咨询一下oracle的售后。
不过网上的资料很多,找找或许有所发现。

或者你就用我说的第二个方法吧,采用和数据库相同的编码来存取。你也可以看看别的项目是如何对这种非ASCII字符的处理方式啊。
马行空牛耕田 2005-10-31
  • 打赏
  • 举报
回复
To mxlmwl(飞星)

谢谢,其实我就是担心数据库字符集设定为英文,而单对NChar或者NVarChar的字符集设定为UTF8,这样到底可不可以。 因为我是在客户方开发,他很可能不允许我改变当前数据库的字符集,毕竟还有其他的项目在上面跑。 所以我想确认的是,单把NChar或者NVarChar的字符集设定为UTF8,能不能实现把数据放进去。 也许这个问题也要去oracle论坛问问才好。 唉!
mxlmwl 2005-10-31
  • 打赏
  • 举报
回复
如果你在java中确保是utf-8数据,那就可以证明你的oracle数据库不是utf-8格式的,所以才会出现乱码。

解决办法1:把oracle改成utf-8格式
解决办法2:不使用utf-8格式,把格式改成和数据库相同编码的格式就可以了。比如数据库是gbk编码,则把你的数据也改成gbk的编码格式并存入就可以了。
马行空牛耕田 2005-10-28
  • 打赏
  • 举报
回复
唉,我现在怀疑在java拿到数据后,数据已经是utf8了,所以提个问题:
怎么样可以应证中文数据已经是utf8编码? 谢谢!
马行空牛耕田 2005-10-27
  • 打赏
  • 举报
回复
现在可以肯定的是:Java代码已经拿到了中文的utf8码
oracle的编码:
NLS_NCHAR_CHARACTERSET
UTF8
禽兽v5 2005-10-27
  • 打赏
  • 举报
回复
如果是b/s,你有给webapp加filter吗?转码用。
YuLimin 2005-10-27
  • 打赏
  • 举报
回复
山水緻景真的不錯,每張都可以當桌面

是这样的繁体吗?
mxlmwl 2005-10-27
  • 打赏
  • 举报
回复
首先检查你拿到的数据是否是utf-8格式的,如果是的话,再检查你的oracle数据库编码,看是否为utf-8格式。
如果oracle是gbk编码,很显然存进去的数据是错误的。
YuLimin 2005-10-27
  • 打赏
  • 举报
回复
如果说是

山水緻景真的不錯,每張都可以當桌面

是这样的繁体

数据库用ZHS16GBK

Java编码用GBK即可。
马行空牛耕田 2005-10-27
  • 打赏
  • 举报
回复
request.setCharacterEncoding("UTF-8") 这个方法在websphere4.0.x(只支持servlet2.2)是不被支持的,郁闷,不过现在已经明确是存数据到数据库时引起错误的了。 所以我想问:
1、怎样配置hibernate写繁体中文;
2、oracle table是否有其他配置;
3、其他说明:websphere, oracle所在服务器(IBM AIX)编码为iso-8859。
马行空牛耕田 2005-10-27
  • 打赏
  • 举报
回复
呵呵,是B/S,但是用的是websphere4.0.x,只支持servlet2.2,filter只在servlet2.3中支持! 但是问题的关键已经不是从页面到java,而是java到数据库。

页面到java呢,我们使用了websphere4的一个特性,强制客户端的request编码为utf-8,这样传到java中的时候,数据在form里,然后从form传回到页面时,仍然显示正常; 但是从form里的拿出utf8的数据,存到数据库里后,再拿出来就错了。 更进一步说,存到数据库里的就错了。
mxlmwl 2005-10-27
  • 打赏
  • 举报
回复
按utf-8存储即可搞定。
马行空牛耕田 2005-10-26
  • 打赏
  • 举报
回复
up一下!
马行空牛耕田 2005-10-26
  • 打赏
  • 举报
回复
存进去之前将字符转成ascii,取出来后,也转成ascii,两组ascii一比较,发现不同。
因为存进去之前是用utf8的,保存的时候也指定了使用unicode,字符集用utf8,但是再取出来时就不对了。 所以怀疑保存到db的时候有问题,或者db table的设定有问题
加载更多回复(1)

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧