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

Oracle SQL Plus Worksheet 中文亂碼根因分析與解決方案 (8i 以上版本)

     編輯:Oracle 資料庫基礎

現象描述

  • 工具:SQL Plus Worksheet (圖形介面,Java 基礎)
  • 版本:Oracle 8i 及以上
  • 安裝時選擇簡體中文編碼集 ZHS16GBK
  • 症狀:Worksheet 介面選單、查詢結果中文全部顯示亂碼;但同機器 SQL*Plus (命令列) 顯示正常。

根因分析

  1. 資料庫編碼集正確:
    SQL> SELECT USERENV('LANGUAGE') FROM DUAL;
    SIMPLIFIED CHINESE_CHINA.ZHS16GBK
  2. 客戶端 NLS_LANG 註冊表正確:
    HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\NLS_LANG = AMERICAN_AMERICA.ZHS16GBK
  3. 關鍵差異:
    • SQL*Plus 為 Native OCI 程式,讀取 NLS_LANG 環境變數/註冊表決定字元集轉換。
    • SQL Plus Worksheet 為 **Java 應用程式** (OEM 組件),**完全忽略 NLS_LANG**,改由自身配置檔決定 JVM 字元集。

這是 Oracle 8i 將管理工具大量改寫為 Java 後引入的已知問題。

解決方案:修改 OEM 配置檔

  1. 定位檔案:$ORACLE_HOME\sysman\config\dbaPPScfg.properties
  2. 用文字編輯器開啟,找到並修改以下兩項 (移除前導 # 註解):
    # SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
    ↓ 修改為
    SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
    
    # SQLPLUS_SYSTEMROOT=c:\\WINNT40
    ↓ 修改為實際作業系統目錄,例:
    SQLPLUS_SYSTEMROOT=d:\\WINNT

    注意:SQLPLUS_SYSTEMROOT 僅 Windows 需設定;Unix/Linux 不需此項。若 Windows 未設,OEM 連線會報 ORA-12560 或 ORA-12545。

  3. 存檔,重新啟動 SQL Plus Worksheet,中文顯示即恢復正常。

補充說明

  • 此配置檔同時影響 OEM 內其他 Java 工具 (如 Schema Manager、Instance Manager)。
  • Oracle 9i/10g 後續版本同樣適用此修正方式。
  • 若使用 UTF-8 編碼集 (AL32UTF8),請將 SQLPLUS_NLS_LANG 對應修改為 AMERICAN_AMERICA.AL32UTF8。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved