Oracle 8i安裝選擇簡體中文字符集(ZHS16GBK)後,SQL*Plus Worksheet(Java GUI工具)顯示中文亂碼,但命令列SQL*Plus顯示正常。此問題Oracle 8i前版本不存在。
SELECT USERENV('LANGUAGE') FROM DUAL;
-- 返回: SIMPLIFIED CHINESE_CHINA.ZHS16GBK ✓ 正確
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\NLS_LANG
-- 值: AMERICAN_AMERICA.ZHS16GBK ✓ 正確
NLS_LANG環境變數/註冊表決定客戶端字符集$ORACLE_HOME/sysman/config/dbaPPScfg.properties
# 原始(註釋狀態):
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
# SQLPLUS_SYSTEMROOT=c:\WINNT40
# 修改為:
SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
SQLPLUS_SYSTEMROOT=d:\WINNT -- 實際作業系統主目錄,如D盤WINNT
SQLPLUS_SYSTEMROOT僅Windows需修改,指向作業系統根目錄。未修改將導致OEM連線報錯:
ORA-12560: TNS:protocol adapter error
ORA-12545: Connect failed because target host or object does not exist
| 場景 | 建議字符集 | 說明 |
|---|---|---|
| 新建資料庫(現代版本) | AL32UTF8 | Unicode標準,支援全球語言,無亂碼風險 |
| 舊系統維護(簡體中文) | ZHS16GBK | 相容既有應用,注意客戶端一致性 |
| 混合語言環境 | AL32UTF8 | 避免字符集轉換損失 |
Oracle 8i Worksheet亂碼本質是JDBC Thin Driver忽略NLS_LANG配置。透過修改dbaPPScfg.properties強制指定Java工具字符集即可解決。現代版本建議統一採用AL32UTF8字符集,從源頭消除編碼地獄。