【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
近日某项目中碰到接口方Oracle字符集编码为US7ASCII,而我们自身Oracle字符集是ZHS16GBK.
此时我们的服务端连接接口取回来的数据显示为乱码.
接口方是不愿意修改Oracle字符集的.
我们使用的是ATL的Ole DB方式,另外使用的是Oralce Provider for OLE DB驱动.
以上为背景.
Oracle字符编码涉及到Oracle客户端的字符编码有关
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
参看链接如下:
)
1.使用微软的Oracle驱动,无效
2.使用登录会话时修改字符集方式,无效,Oracle不允许修改会话字符集.
3.修改连接串属性,增加CharSet=US7ASCII属性,无效,可能原因OracleOleDB不支持,设置有误.
(SyBase How connection parameters work可能需要翻墙,也可能是公司网络限制
4.建议做数据导入方式,及增加中间表转换的方式.被否决.
5.删除Oracle客户端的注册表NLS_LANG键值,有效.
需要设置字符集,程序方面目前没有找到方法,那是否可以在Oracle建立会话之前先设置注册表项呢?
这个思路出发,那我先删掉,也不需要修改程序,要不先试试.
从当前使用有效果来看,如果Oracle客户端未设置,将使用Oracle服务端的字符集.(猜测)
目前还在做进一步的测试,数据方面的内容.但这个事情算是已经告一个段落了.
有思路,去尝试,去验证,一定是能找到解决方案的.虽然可能不一定算是最佳的,但一定是很有成就感的.
来源:oschina
链接:https://my.oschina.net/u/230235/blog/171131