VB6.0连接Oracle中文乱码

问题表述:

VB连接Oracle 11g数据库,取出的数据出现中文乱码,英文正常。

环境如下:

服务端:Oracle11g,Radhat,英文操作系统,数据库字符集 AMERICAN_AMERICA.ZHS16GBK

客户端:MSDAORA驱动包,XP中文,系统字符集GBK,VB6.0汉化版,安装有Oracle11g Client,注册表中在Oracle下有NLS_LANG键,键值为AMERICAN_AMERICA.ZHS16GBK

连接语句:

Conn.ConnectionString = "Provider=MSDAORA.1;Password=*****;User ID=******;Data Source=dbcenter;Persist Security Info=True"

获取数据后,中文显示为“?????”

解决方法:

1、查看服务器端数据库字符集

select userenv('language') from dual;

获得结果为 AMERICAN_AMERICA.ZHS16GBK

2、在XP系统环境中增加变量NLS_LANG,赋值AMERICAN_AMERICA.ZHS16GBK

即:NLS_LANG = AMERICAN_AMERICA.ZHS16GBK

3、保存后重启计算机或注销计算机

4、重新打开VB工程,无需修改代码,获取中文数据正常。

注意:

1、在没有配置环境变量的情况下,使用pl/sql或者navicat均可以正常获取中文数据,无乱码现象。

2、只有VB6.0出现该问题,配置NLS_LANG变量后,正常读取中文数据。

3、在VB连接语句中加入Unicode=True并不生效,无法解决中文乱码问题。

分析现象后,个人认为,pl/sql、navicat等客户端会读取注册表中Oracle的NLS_LANG键值,而VB在使用MSDAORA驱动访问Oracle时,会读取系统环境变量中的NLS_LANG参数,如果没有该参数,则会出现中文乱码问题,而英文显示正常,具体用的何种编码来解释获取的数据,尚未查明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值