首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 8i SQL*Plus Worksheet中文亂碼根因與修復:dbaPPScfg.properties配置詳解

     編輯:Oracle 資料庫基礎

Java GUI工具字符集亂碼:NLS_LANG無效、需修改Enterprise Manager配置文件

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 — 客戶端設置正確。
  • SQL*Plus (字符模式) 查詢中文正常。
  • SQL*Plus Worksheet (Java GUI) 顯示亂碼。
  • 根因分析

    • 非Java工具 (SQL*Plus, Exp/Imp, SQL Loader) 讀取NLS_LANG環境變數/註冊表決定客戶端字符集。
    • Java工具 (Worksheet, EM Console, DBA Studio) 不讀取NLS_LANG,而是讀取專屬配置文件 $ORACLE_HOME/sysman/config/dbaPPScfg.properties 中的 SQLPLUS_NLS_LANG 參數。
    • 默認該參數被註釋且值為 AMERICAN_AMERICA.WE8ISO8859P1,導致中文編碼錯誤。

    修復步驟

    1. 定位文件:
      $ORACLE_HOME/sysman/config/dbaPPScfg.properties (Windows: %ORACLE_HOME%\sysman\config\dbaPPScfg.properties)
    2. 用文本編輯器打開,找到兩行:
      # SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
      # SQLPLUS_SYSTEMROOT=c:\\WINNT40
    3. 修改為:
      SQLPLUS_NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
      SQLPLUS_SYSTEMROOT=d:\\WINNT (替換為實際系統盤符與Windows目錄)
    4. 保存文件,重啟SQL*Plus Worksheet / Enterprise Manager Console。

    驗證

    • Worksheet中執行 SELECT * FROM nls_database_parameters WHERE parameter LIKE '%CHARACTERSET%'; 顯示正常中文。
    • 查詢含中文數據的表,結果集正常顯示。
    • EM Console連接不再報 ORA-12560 或 ORA-12545 (由SQLPLUS_SYSTEMROOT錯誤引起)。

    補充說明

    • Unix/Linux平台無需修改SQLPLUS_SYSTEMROOT,僅修改SQLPLUS_NLS_LANG即可。
    • Oracle 9i/10g後續版本同理,配置文件路徑可能變為 $ORACLE_HOME/sysman/config/emoms.properties 或 emcli 相關配置。
    • 根治建議:統一字符集為 AL32UTF8 (Unicode),避免GBK/UTF-8混用導致的跨平台亂碼。

    Java GUI工具字符集配置獨立於NLS_LANG,是Oracle 8i/9i時代遺留的「坑」。記住:字符界面看NLS_LANG,Java界面看dbaPPScfg.properties。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved