Oracle

Oracle 到 T-SQL OPENQUERY 特殊字元轉換問題

  • January 2, 2020

我正在努力弄清楚我的連結伺服器上的字元編碼問題可能來自這裡。ZPDT_PAT_ALPHA 列的末尾應該有一個度數符號,如 DUMP 所示。

SELECT *, CHAR(176)
FROM  OPENQUERY([R_Pronto], 'SELECT DUMP(ZPDT_PAT_ALPHA), ZPDT_PAT_ALPHA
           FROM LINKED.ZCUSPRODATTR0')

在此處輸入圖像描述

這是 NLS 參數。NLS_LANG 在系統資料庫“AMERICAN_AMERICA.WE8MSWIN1252”中設置

在此處輸入圖像描述

以及使用 Microsoft OLE DB Provider for ODBC Drivers 的連結伺服器設置 在此處輸入圖像描述

我很感激任何關於我可以調整什麼以使特殊字元正確顯示的指示。不幸的是,我無權訪問 Oracle DB 進行任何更改。

位於該數據庫之上的應用程序能夠顯示該字元 - 我相信它直接與 Oracle 互動。

在此處輸入圖像描述

謝謝

編輯:顯示 TRANSLATE USING NCHAR_CS

編輯2: 在此處輸入圖像描述

NLS_LANG由於這些答案中描述的原因,解決方案是將系統資料庫中的值更改為“AMERICAN_AMERICA.US7ASCII”:

現在角色正在正確地通過。

謝謝@wernfried-domscheit!

您發布的 NLS 參數用於 Oracle 客戶端連接。由於您實際上並未使用 Oracle 客戶端,因此我懷疑它們是否相關。(它們看起來像預設值。)要確認數據庫字元集,請執行:

從 NLS_DATABASE_PARAMETERS 中選擇值,其中 parameter=‘NLS_CHARACTERSET’

如果它是 Oracle 的最新版本,我希望它會說“AL32UTF8”,即 UTF-8。

如果是這樣,您的問題可能是嘗試轉換 UTF-8?nvarchar 儲存為 UCS-2。我無法編寫程式碼,因為我沒有合適的測試環境,但可能類似於:

declare @result nvarchar(255);
set @result = (select... )

假設它是一個單例選擇。也許嘗試顯式轉換為 nvarchar?SQL Server 2019 有一些 UTF-8 支持,不過我還沒玩過。

高溫高壓

引用自:https://dba.stackexchange.com/questions/256200