您的位置:首页 > 数据库 > Oracle

Oracle开发之中文乱码的问题(二)

2013-07-24 22:39 489 查看
c#访问Oracle,本来是很常见的,但是在实际的工作中确实遇到了各种各样的异常,特此分析并总结如下,以便以后查找方便:

数据库的字符集常用的两种方式:

美国编码SIMPLIFIED CHINESE_CHINA.US7ASCII

中国编码SIMPLIFIED CHINESE_CHINA.ZHS16GBK

连接方式:

1.OLEDB连接

{Provider=MSDAORA.1;User ID=martin;password=1;Data Source=orcl;Unicode=True;Integrated Security=yes;Persist Security Info=False}
{Provider=ORAOLEDB.ORACLE;User ID=martin;password=1;Data Source=orcl;Unicode=True;Persist Security Info=False}


OLEDB连接Oracle分为两种方式,即分别微软和Oracle写的不同的驱动。

provider=MSDAORA.1是微软写的驱动

provider=OraOLEDB.Oracle是Oracle自带的驱动

小结:

使用MSDAORA.1驱动的OLEDB连接,不管数据库字符集是美国编码US7ASCII还是中国编码ZHS16GBK,都不会出现乱码,若出现乱码,可能是本地Oracle与服务端Oracle字符集不相同导致的。需要修改注册表nls_lang变量。但是,在X64位Oracle上使用MSDAORA.1时,会出现未在本地计算机上注册“MSDAORA.1”提供程序的问题。也就是说MSDAORA.1在64位的Oracle支持不好。

使用ORAOLEDB.ORACLE驱动的OLEDB连接,对中国编码ZHS16GBK支持很好。若Oracle字符集是美国编码US7ASCII,数据读取无乱码,写入有乱码,并且做为where条件传进去的中文参数为乱码。

ORAOLEDB.ORACLE对Oracle的32位或者64位不受影响。

2.其他的连接方式

参考博客:

/article/9251259.html;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: