Oracle 客戶端與伺服器字元集不一致導致中文顯示亂碼。核心解決方式:統一設定 NLS_LANG 環境變數與登錄值為 語言_地區.字元集 格式,且必須與伺服器端 NLS_DATABASE_PARAMETERS 一致。
select * from nls_database_parameters
where parameter in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET');
假設結果:
組合為:AMERICAN_AMERICA.ZHS16GBK
NLS_LANGAMERICAN_AMERICA.ZHS16GBKregeditHKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home1NLS_LANG → 數值資料改為:AMERICAN_AMERICA.ZHS16GBK64 位元 Windows 將 32 位元應用程式登錄導向 Wow6432Node:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient11g_home1 並新增字串值 NLS_LANG若 PL/SQL Developer 放在 D:\Program Files\PLSQL Developer,可建立兩個 .reg 檔快速切換:
AMERICAN_10g.reg
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1] "NLS_LANG"="AMERICAN_AMERICA.US7ASCII"
CHINESE_10g.reg
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1] "NLS_LANG"="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
雙擊執行對應 .reg 檔,重啟 PL/SQL Developer 即可生效。
select userenv('language') from dual;
-- 應顯示 AMERICAN_AMERICA.ZHS16GBK
select '中文測試' from dual;
-- 應正常顯示中文
| 字元集 | 適用場景 |
|---|---|
| ZHS16GBK | 簡體中文 Windows 環境(含繁體擴展) |
| ZHT16MSWIN950 | 繁體中文 Windows 環境 |
| AL32UTF8 | Unicode 國際化環境(推薦新系統) |
| US7ASCII | 純英文環境 |
AMERICAN_AMERICA.AL32UTF8