熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle 8i中字符集亂碼問題析及其解決辦法

2013-11-13 15:44:48  來源: Oracle 

  一問題描述
  SQL Plus WorkSheet是一個窗口圖形界面的SQL語句編輯器對於那些喜歡窗口界面而不喜歡字符界面的用戶該工具相對SQL/PLUS受到了很大的歡迎但從Oracle i以後如果安裝Oracle i時選取的是別於英語的字符集對於我們中國通常會選取簡體中文字符(ZHSGBK)安裝成功後運行SQL Plus WorkSheet程序會出現所有的中文顯示以及查詢結果均為亂碼的情況
  二問題分析
  最初出現該問題首先懷疑就是安裝時字符集設置有問題也就是說沒有設置正確的簡體中文字符集首先檢查數據庫字符集在SQL/PLUS中運行下面的SQL語句檢查所連接數據庫的字符集
  SQL> select userenv(language) from dual;
  USERENV(LANGUAGE)
  SIMPLIFIED CHINESE_CHINAZHSGBK
  查詢結果發現數據庫安裝時所選字符集為簡體中文ZHSGBK說明安裝時字符集設置完全正確第二步開始懷疑是用戶客戶端字符集問題檢查客戶端注冊表打開注冊表編輯程序(RegEdit)在HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG發現Oracle客戶端字符集為AMERICAN_AMERICAZHSGBK設置也完全正確可以排除是客戶端字符集設置錯誤的問題同時還有一個現象就是在同一個客戶端機器上SQL/PLUS中的查詢字符集顯示完全正常這也說明不是字符集設置問題而是系統程序SQL/Plus Worksheet的問題
  在Oracle i以前的版本中從來沒有出現過這樣的情況這應該和Oracle版本有關我們知道Oracle i和它前面的版本一個顯著的區別就是大部分的Oracle系統程序現在均采用Java驅動其實這也就是產生字符集亂碼問題的根本所在非Java驅動的程序如SQL*Plus有一個系統參數NLS_LANG該參數在UNIX系統中設置在環境變量中在Windows操作系統中設置在注冊表中這個參數決定了客戶端應用程序的字符集而對於基於Java應用的程序如現在遇到的SQL*PLus WorksheetNLS_LANG參數對這類程序是不起任何作用的
  三解決方案
  找到了問題產生的原因後下面來討論如何解決該問題對於Oracle Enterprise Manager中的所有工具有一個配置文件名為dbappscfgproperties修改該文件即可解決上述問題這個文件的位置在$ORACLE_HOME\sysman\config目錄下用任何的文本編輯器打開該文件在這個文件裡面找到這樣一項# SQLPLUS_NLS_LANG=AMERICAN_AMERICAWEISOP
  去掉注釋符#同時將其修改為SQLPLUS_NLS_LANG=AMERICAN_AMERICAZHSGBK
  對於Windows操作系統還需要修改一項在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT去掉注釋符將其修改為你所在機器的操作系統主目錄如操作系統的主目錄在D盤的Winnt下則將其修改為 SQLPLUS_SYSTEMROOT=d:\\WINNT
  對於後面一項的修改只對Windows操作系統進行對UNIX操作系統則不需要如果在Windows操作系統中不修改該項在Oracle Enterprise Manager中連接系統時會提示如下的錯誤
  ORA TNS:protocol adapter error
  或者
  ORA Connect failed because target host or object does not exist
  修改完成後保存文件退出編輯重新連接SQL PLUS Worksheet字符集亂碼問題得到解決顯示正確的簡體中文字符集
  
  

From:http://tw.wingwit.com/Article/program/Oracle/201311/17236.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.