首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 8i SQL Plus Worksheet 亂碼根因與修復:Java 驅動 NLS_LANG 無效

     編輯:Oracle 資料庫相關知識

現象

安裝 8i 選簡體中文 (ZHS16GBK) 後,SQL*Plus 正常,但 SQL Plus Worksheet (Java GUI) 所有中文顯示亂碼。

根因分析

  • 資料庫字元集正確:SELECT USERENV('LANGUAGE') FROM DUAL → SIMPLIFIED CHINESE_CHINA.ZHS16GBK。
  • 客戶端註冊表 NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 正確,SQL*Plus 正常證明非字元集設定問題。
  • 8i 大量工具改用 Java 驅動 (JDBC Thin/OCI),NLS_LANG 對 Java 程式無效,Java 讀取自身配置檔決定字元集。

修復步驟

  1. 編輯 $ORACLE_HOME/sysman/config/dbappscfg.properties。
  2. 找到並修改兩項 (移除 # 註解):
    SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
    SQLPLUS_SYSTEMROOT=d:\WINNT   # Windows 必須指定系統根目錄
  3. 儲存、重啟 SQL Plus Worksheet,中文顯示恢復正常。

未修改 SYSTEMROOT 的後果

ORA-12560: TNS: protocol adapter error
ORA-12545: Connect failed because target host or object does not exist

補充說明

  • Unix/Linux 無需設定 SQLPLUS_SYSTEMROOT。
  • 10g 後 Enterprise Manager 改用 Web 介面,此問題不再出現。
  • JDBC 應用同理:需在 Java 端設定 -Duser.language=zh -Duser.region=CN -Dfile.encoding=GBK 或程式碼 System.setProperty。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved