免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4665 | 回复: 6
打印 上一主题 下一主题

求助!Oracle10G+unixODBC2.3 的中文问题【已解决】 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-04 11:48 |只看该作者 |倒序浏览
本帖最后由 novemberrain 于 2011-01-07 18:34 编辑

达人们,帮忙诊断下是什么问题

环境:
服务端:CentOs5.5 + oracle 10.2.1, 数据库的字符集为: NLS_LANG=AMERICAN_AMERICA.AL32UTF8
客户端: CentOs5.5 + oracle client 10.2.0  + unixODBC2.3.0, 环境变量为: NLS_LANG=AMERICAN_AMERICA.AL32UTF8;  LANG=en_US.UTF-8

问题:
在客户端使用sqlplus往表里写中文,  可以正确的读出;
在客户端使用unixodbc的isql可以从表里正确读出sqlplus写的中文;
在客户端使用unixodbc的isql向表里写的中文是乱码, 无论是isql还是sqlplus读出的都是乱码

从表里导出原始数据后发现, 数据库保存的中文好像是 ISO8859-1 转成 UTF8 的编码

从unixodbc的日志中发现, unixodbc连接数据库时有如下信息:

                Entry:  
                        Connection = 0x84ab6a8
                        Server Name = [Oracle10gODBCDriver][length = 19 (SQL_NTS)]
                        User Name = [crmmdb][length = 6 (SQL_NTS)]
                        Authentication = [******][length = 6 (SQL_NTS)]
                UNICODE Using encoding ASCII 'ISO8859-1' and UNICODE 'UCS-2LE'

弄了好几天, 一直找不到原因,大侠们帮帮看看吧,谢谢!

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2011-01-04 12:39 |只看该作者
编码问题?

论坛徽章:
0
3 [报告]
发表于 2011-01-04 12:46 |只看该作者
编码问题?
renxiao2003 发表于 2011-01-04 12:39



我觉得应该是,但是不能定位是 unixodbc 转码的问题还是 oracle odbc 驱动转码的问题

用抓包工具初步看了下, 到服务器时已经是转码过的了

如果是 unixodbc 转的, 问题是不管怎样设置,包括环境变量、 odbc的配置文件, 转码后的东西是一样的

论坛徽章:
0
4 [报告]
发表于 2011-01-04 14:41 |只看该作者
试了半天还是不行!

自己顶一下!

盼高手们能有办法!

论坛徽章:
0
5 [报告]
发表于 2011-01-04 20:48 |只看该作者
自己再顶一下,盼高人出手相救!

论坛徽章:
0
6 [报告]
发表于 2011-01-07 18:34 |只看该作者
本帖最后由 novemberrain 于 2011-01-07 18:46 编辑

终于解决了
正如renxiao2003所说,是编码问题

数据库字符集设置为: AMERICAN_AMERICA.AL32UTF8
由于系统使用的汉字为GBK,因此客户端环境变量设置为: NLS_LANG=AMERICAN_AMERICA.ZHS16GBK;  LANG=en_US

最关键的是UNIXODBC的编译,一定要加上以下两个选项:
--enable-iconv=yes --with-iconv-char-enc=GB18030

ok,经过以上折腾,通过UNIXODBC写到数据库的中文不会再是乱码了

以上参考了一介村夫 (村长) 以前的帖子

http://bbs.chinaunix.net/viewthread.php?tid=1488504

谢谢村长!

论坛徽章:
0
7 [报告]
发表于 2012-11-08 18:39 |只看该作者
你好,跟你遇到同样的问题了,unixodbc编译的参数怎么设置的,--with-iconv-char-enc 后面的编码应该选什么

其余的都可以,就是用odbc插入中文乱码。

附:
ORACLE charset
AMERICAN_AMERICA.ZHS16GBK

NLS_LANG
AMERICAN_AMERICA.UTF8

回复 1# novemberrain


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP