2009-05-19 88 views
0

我有一個遺留數據庫集,NLS_LANG設置爲IW8ISO8859P8。這我不能改變。Oracle Connection和nls_lang

我有另一個應用程序,這不適用於unicode,它適用於我的應用程序工作在相同的數據。 在一些字段和某些時間,用戶插入作爲字符串的一部分的字符161,其代表NIS貨幣simble。 當我嘗試使用oledb從.Net讀取這些數據時,一切正常,但是當我嘗試使用oracle客戶端時,我得到垃圾數據。當我在.Net中插入NIS時,它被保存爲垃圾。

我知道我可以操縱數據後,我得到它,但我正在尋找一些在.Net中的oracle客戶端的配置來得到這個工作。

我一直在爲此工作了幾個星期,任何幫助將appriciated。 Tnx Noam

回答

0

在一天結束時,我使用輔助nvarchar列解決了這個問題。並觸發它們之間的轉換。

我在plsql中編寫了函數,它使用由許多if語句實現的自定義編碼來進行Unicode和Unicode之間的字節轉換。

對於有問題的數據的每一列,我添加了一個nvarchar存儲的第二列,並觸發使用該函數來轉換有問題的數據。

因此,遺留應用程序使用並更新varchar列,並且觸發器將其轉換爲Unicode列。 .Net代碼使用Unicode列,並且觸發器再次將信息轉換爲遺留應用程序中使用的有問題的編碼。

如果您需要更多的信息,請隨時與我聯繫以獲取更多信息

+0

添加一些你寫的樣本字節轉換代碼會很好 – mkb 2016-03-08 15:56:07

0

你看過Oracle的NLS_LANG FAQ嗎?

+0

是的,找不到它的任何幫助,因爲客戶機之間移動數據的問題,而.NET不引用那裏。 – Noam 2009-05-24 11:37:46

0

你是否檢查客戶端上的nls_lang設置?對nls設置的任何更改都可以被客戶端(註冊表和環境)上的設置覆蓋。也許這是你的問題的原因。 驗證您在客戶端上沒有任何其他nls設置,並且非您的功能明確更改它。 您可以運行登錄後觸發器更改會話格式。這將確保服務器設置將影響所有客戶端。 另外,確保設置了nls_territory。它應該被設置爲nls_lang的一部分,但以防萬一你的意思是nls_language。我相信貨幣符號受此影響。

+0

我檢查了我的客戶的設置和相同。 請注意,我有另一個nonUnicode應用程序運行在同一臺機器上,它的工作原理是完美的,我唯一的問題是,當我從.Net獲取數據時,Oracle客戶機將其轉換爲unicode,並且我丟失了一些字符。 – Noam 2009-05-24 11:39:21