Oracle 8i 引入 Java 架構後,SQL*Plus Worksheet(圖形化工具)出現中文亂碼,而傳統 SQL*Plus(非 Java)卻正常。根因在於 Java 程式不讀取 NLS_LANG 登錄設定,需另行配置 dbaPPScfg.properties。本文詳細記錄問題重現、根因分析與修復步驟。
ZHS16GBK 簡體中文字元集SQL*Plus(命令列)中文顯示、查詢結果正常SQL*Plus Worksheet 介面與查詢結果全為亂碼SQL> SELECT userenv('language') FROM dual;
USERENV('LANGUAGE')
-------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
✅ 資料庫端正確。
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\NLS_LANG
= AMERICAN_AMERICA.ZHS16GBK
✅ Client 端正確。
NLS_LANG(Unix 環境變數 / Windows 登錄)決定 Client 字元集此為 Oracle 8i 大量採用 Java 驅動導致的架構副作用。
$ORACLE_HOME\sysman\config\dbaPPScfg.properties
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK# SQLPLUS_SYSTEMROOT=c:\\WINNT40SQLPLUS_SYSTEMROOT=d:\\WINNTEnterprise Manager 連線時出現:
ORA-12560: TNS:protocol adapter error
ORA-12545: Connect failed because target host or object does not exist
$ORACLE_HOME/sysman/config/emoms.properties)oracle.jdbc.defaultNChar=true 等屬性亂碼本質是編碼協商失敗。Oracle 8i 引入 Java 工具鏈卻未同步 NLS 配置機制,導致 NLS_LANG 失效於 Java 程式。記住:Java 工具看 properties,非 Java 工具看 NLS_LANG,雙軌配置缺一不可。