Oracle

將 sqlplus 中的 Unicode 數據假離線到 ISO 客戶端,無需字元集轉換

  • January 17, 2020

我目前面臨以下問題:

我們有一個帶有字元集 AL32UTF8 的 Oracle 11g 數據庫和一個帶有 NLS_LANG=GERMAN_GERMANY.WE8ISO8859P1 的 sqlplus-client。儲存在數據庫中的是各種非 ISO8859-1 字元。

現在,當客戶端連接到數據庫並嘗試假離線這些特殊字元時,會根據客戶端的 NLS_LANG 設置進行字元集轉換,並且特殊字元會失去。

不幸的是,更改 client-NLS_LANG 並不容易(遺留應用程序 - 它很複雜……)。

是否有一種簡單或標準的方法可以在不失去這些特殊字元的情況下假離線這些數據?

我考慮過用base64編碼數據,假離線,然後在客戶端解碼。

但是有更好的方法嗎?

不設置 NLS_LANG 會很困難。

你在簡單的編碼或解析/操作字元串方面有多好?

你可以做:

select DUMP(field) from table;

然後編寫某種轉換程式碼,將轉儲中的逗號分隔數字解析為 Unicode。

您可以NLS_LANG簡單地在命令行上設置值:

SET NLS_LANG=GERMAN_GERMANY.AL32UTF8

只要視窗保持打開狀態,該視窗的 NLS_LANG 值就會一直存在。

請注意,當您設置時,NLS_LANG它對sqlplus 使用的字元集沒有任何影響!

sqlplus 從目前命令行繼承字元集,即您還必須更改它:

C:\>chcp 65001
Active code page: 65001

C:\>SET NLS_LANG=GERMAN_GERMANY.AL32UTF8

C:\>sqlplus ...

這裡是 MS程式碼頁標識符列表

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