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

來源:互聯網
上載者:User

正在看的ORACLE教程是:Oracle 8i字元集亂碼問題析及其解決辦法。一、問題描述

  SQL Plus WorkSheet是一個視窗圖形介面的SQL語句編輯器,對於那些喜歡視窗介面而不喜歡字元介面的使用者,該工具相對SQL/PLUS受到了很大的歡迎。但從Oracle 8i以後,如果安裝Oracle 8i時選取的是別於英語的字元集,對於我們中國,通常會選取簡體中文字元集(ZHS16GBK),安裝成功後,運行SQL Plus WorkSheet程式,會出現所有的中文顯示以及查詢結果均為亂碼的情況。

  二、問題分析

  最初出現該問題,首先懷疑就是安裝時字元集設定有問題,也就是說沒有設定正確的簡體中文字元集。首先檢查資料庫字元集,在SQL/PLUS中,運行下面的SQL語句,檢查所串連資料庫的字元集:

  查詢結果探索資料庫安裝時所選字元集為簡體中文ZHS16GBK,說明安裝時字元集設定完全正確。第二步開始懷疑是使用者用戶端字元集問題,檢查用戶端註冊表,開啟註冊表編輯程式(RegEdit),在HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG,發現Oracle用戶端字元集為AMERICAN_AMERICA.ZHS16GBK,設定也完全正確,可以排除是用戶端字元集設定錯誤的問題。同時還有一個現象就是在同一個用戶端機器上SQL/PLUS中的查詢字元集顯示完全正常,這也說明不是字元集設定問題,而是系統程式SQL/Plus Worksheet的問題。

  在Oracle 8i以前的版本中,從來沒有出現過這樣的情況,這應該和Oracle版本有關,我們知道Oracle 8i和它前面的版本一個顯著的區別就是大部分的Oracle系統程式,現在均採用Java驅動,其實這也就是產生字元集亂碼問題的根本所在。非Java驅動的程式,如SQL*Plus,有一個系統參數NLS_LANG,該參數在UNIX系統中設定在環境變數中,在Windows作業系統中設定在註冊表中,這個參數決定了用戶端應用程式的字元集。而對於基於Java應用的程式,如現在遇到的SQL*PLus Worksheet,NLS_LANG參數對這類程式是不起任何作用的。

  三、解決方案

  找到了問題產生的原因後,下面來討論如何解決該問題。對於Oracle Enterprise Manager中的所有工具,有一個設定檔名為dbappscfg.properties,修改該檔案即可解決上述問題。這個檔案的位置在$ORACLE_HOME\sysman\config目錄下,用任何的文字編輯器開啟該檔案,在這個檔案裡面,找到這樣一項,

  去掉注釋符#,同時將其修改為SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。

  對於Windows作業系統,還需要修改一項,在檔案中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注釋符,將其修改為你所在機器的作業系統主目錄。如作業系統的主目錄在D盤的Winnt下,則將其修改為 SQLPLUS_SYSTEMROOT=d:\\WINNT。

  對於後面一項的修改只對Windows作業系統進行,對UNIX作業系統則不需要。如果在Windows作業系統中不修改該項,在Oracle Enterprise Manager中,串連系統時,會提示如下的錯誤:

  或者

  修改完成後,儲存檔案,退出編輯。重新串連SQL PLUS Worksheet,字元集亂碼問題得到解決,顯示正確的簡體中文字元集。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.