1. 程式人生 > 實用技巧 >連線不同字符集編碼Oracle問題處理過程

連線不同字符集編碼Oracle問題處理過程

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

近日某專案中碰到介面方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服務端的字符集.(猜測)

目前還在做進一步的測試,資料方面的內容.但這個事情算是已經告一個段落了.

有思路,去嘗試,去驗證,一定是能找到解決方案的.雖然可能不一定算是最佳的,但一定是很有成就感的.

轉載於:https://my.oschina.net/airhead/blog/171131