Oracle 8i引入Java版SQL*Plus Worksheet與Enterprise Manager Console,發現註冊表NLS_LANG設置正確、SQL*Plus字符界面正常,但Worksheet顯示中文亂碼。根因:Java工具忽略NLS_LANG,需修改dbaPPScfg.properties配置文件強制指定字符集。本文提供精確修復步驟與驗證方法。
ZHS16GBK字符集。SQL> SELECT userenv('language') FROM dual; 返回 SIMPLIFIED CHINESE_CHINA.ZHS16GBK — 數據庫字符集正確。HKLM\SOFTWARE\ORACLE\NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK — 客戶端設置正確。NLS_LANG環境變數/註冊表決定客戶端字符集。$ORACLE_HOME/sysman/config/dbaPPScfg.properties 中的 SQLPLUS_NLS_LANG 參數。AMERICAN_AMERICA.WE8ISO8859P1,導致中文編碼錯誤。$ORACLE_HOME/sysman/config/dbaPPScfg.properties (Windows: %ORACLE_HOME%\sysman\config\dbaPPScfg.properties)# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1# SQLPLUS_SYSTEMROOT=c:\\WINNT40SQLPLUS_NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBKSQLPLUS_SYSTEMROOT=d:\\WINNT (替換為實際系統盤符與Windows目錄)SELECT * FROM nls_database_parameters WHERE parameter LIKE '%CHARACTERSET%'; 顯示正常中文。ORA-12560 或 ORA-12545 (由SQLPLUS_SYSTEMROOT錯誤引起)。SQLPLUS_SYSTEMROOT,僅修改SQLPLUS_NLS_LANG即可。$ORACLE_HOME/sysman/config/emoms.properties 或 emcli 相關配置。AL32UTF8 (Unicode),避免GBK/UTF-8混用導致的跨平台亂碼。Java GUI工具字符集配置獨立於NLS_LANG,是Oracle 8i/9i時代遺留的「坑」。記住:字符界面看NLS_LANG,Java界面看dbaPPScfg.properties。