連線不同字符集編碼Oracle問題處理過程
近日某專案中碰到介面方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服務端的字符集.(猜測)
目前還在做進一步的測試,資料方面的內容.但這個事情算是已經告一個段落了.
有思路,去嘗試,去驗證,一定是能找到解決方案的.雖然可能不一定算是最佳的,但一定是很有成就感的.
轉載於:https://my.oschina.net/airhead/blog/171131