连接不同字符集编码Oracle问题处理过程

丶灬走出姿态 提交于 2019-12-23 20:14:06

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

近日某项目中碰到接口方Oracle字符集编码为US7ASCII,而我们自身Oracle字符集是ZHS16GBK.

此时我们的服务端连接接口取回来的数据显示为乱码.

接口方是不愿意修改Oracle字符集的.

我们使用的是ATL的Ole DB方式,另外使用的是Oralce Provider for OLE DB驱动.

以上为背景.

Oracle字符编码涉及到Oracle客户端的字符编码有关

image

Oracle客户端编码与Oracle服务端编码一致时不会进行编码转换(Features of OraOLEDB)

做了如下尝试:

0.修改连接串属性,增加Auto Translate=False属性,无效(

因为原来有碰到过SQL Server乱码问题, 修改数据库连接串即可.

Provider=SQLOLEDB.1;Password="xxx";Persist Security Info=True;User ID=xxx;Initial Catalog=xxx;Data Source=xxx;Auto Translate=False

参看链接如下:

Character data is represented incorrectly when the code page of the client computer differs from the code page of the database in SQL Server 2005

)

1.使用微软的Oracle驱动,无效

2.使用登录会话时修改字符集方式,无效,Oracle不允许修改会话字符集.

3.修改连接串属性,增加CharSet=US7ASCII属性,无效,可能原因OracleOleDB不支持,设置有误.

(SyBase How connection parameters work可能需要翻墙,也可能是公司网络限制

php连接oracle设定字符集,避免乱码)

4.建议做数据导入方式,及增加中间表转换的方式.被否决.

5.删除Oracle客户端的注册表NLS_LANG键值,有效.

需要设置字符集,程序方面目前没有找到方法,那是否可以在Oracle建立会话之前先设置注册表项呢?

这个思路出发,那我先删掉,也不需要修改程序,要不先试试.

从当前使用有效果来看,如果Oracle客户端未设置,将使用Oracle服务端的字符集.(猜测)

目前还在做进一步的测试,数据方面的内容.但这个事情算是已经告一个段落了.

有思路,去尝试,去验证,一定是能找到解决方案的.虽然可能不一定算是最佳的,但一定是很有成就感的.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!