Oracle資料庫字元集問題解決方案大全

來源:互聯網
上載者:User
---- 在國內外大中型資料庫管理系統中,把ORACLE作為資料庫管理平台的使用者比
較多。ORACLE 不論是資料庫管理能力還是安全性都是無可非議的,但是,它在漢
字資訊的顯示方面著實給中國使用者帶來不少麻煩,筆者多年從事ORACLE資料庫管
理,經常收到周圍使用者和外地使用者反映有關ORACLE資料庫漢字顯示問題的求援信,
主要現象是把漢字顯示為不可識別的亂碼,造成原來大量資訊無法使用。本文將就
這一問題產生的原因和解決辦法進行一些探討,供存在這方面問題的使用者朋友參
考。  
---- 1、原因分析  
  
---- 通過對使用者反映情況的分析,發現字元集的設定不當是影響ORACLE資料庫漢
字顯示的關鍵問題。那麼字元集是怎麼一會事呢?字元集是ORACLE 為適應不同語
言文字顯示而設定的。用於漢字顯示的字元集主要有ZHS16CGB231280,
US7ASCII,WE8ISO8859P1等。字元集不僅需在伺服器端存在,而且用戶端也必須
有字元集註冊。伺服器端,字元集是在安裝ORACLE時指定的,字元集登記資訊儲存
在ORACLE資料庫字典的V$NLS_PARAMETERS表中;用戶端,字元集分兩種情況,一
種情況是sql*net 2.0以下版本,字元集是在windows的系統目錄下的oracle.ini
檔案中登記的;另一種情況是sql*net 2.0以上(即32位)版本,字元集是在  
windows的系統註冊表中登記的。要在用戶端正確顯示ORACLE 資料庫漢字資訊,首
先必須使伺服器端的字元集與用戶端的字元集一致;其次是載入到ORACLE資料庫的
資料字元集必須與伺服器指定字元集一致。因此,把使用者存在的問題歸納分類,產
生漢字顯示異常的原因大致有以下幾種:  
  
---- 1. 1伺服器指定字元集與客戶字元集不同,而與載入資料字元集一致。  
  
---- 這種情況是最常見的,只要把用戶端的字元集設定正確即可,解決辦法見
2.1。  
  
---- 1. 2伺服器指定字元集與客戶字元集相同,與載入資料字元集不一致。  
  
---- 這類問題一般發生在ORACLE版本升級或重新安裝系統時選擇了與原來伺服器
端不同的字元集,而恢複載入的備份資料仍是按原字元集卸出的場合,以及載入從其
它使用不同字元集的ORACLE資料庫卸出的資料的情況。這兩種情況中,不管伺服器
端和用戶端字元集是否一致都無法顯示漢字。解決辦法見2.2。  
  
---- 1.3伺服器指定字元集與客戶字元集不同,與輸入資料字元集不一致。  
  
---- 這種情況是在用戶端與伺服器端字元集不一致時,從用戶端輸入了漢字信
息。輸入的這些資訊即便是把用戶端字元集更改正確,也無法顯示漢字。解決辦法
見2.3。  
  
---- 2.解決辦法  
  
---- 下面將分別對上述三種情況給出解決辦法。為了敘述方便,假設用戶端使用
WINDOWS95/98環境,並已成功地配置了TCP/IP協議,安裝了ORACLE的sql*net,
sql*pluse產品。  
  
---- 2.1 設定用戶端字元集與伺服器端字元集一致  
  
---- 假設當前伺服器端使用US7ASCII字元集。  
  
---- (1)查看伺服器端字元集  
  
---- 通過用戶端或伺服器端的sql*plus登入ORACLE的一個合法使用者,執行下列
SQL語句:  
  
SQL > select * from V$NLS_PARAMETERS  
parameter value
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
…. ….
NLS_CHARACTERSET US7ASCII
NLS_SORT BINARY
NLS_NCHAR_CHARACTERSET US7ASCII
  
---- 從上述列表資訊中可看出伺服器端ORACLE資料庫的字元集為'US7ASCII'。  
  
---- (2)按照伺服器端字元集對用戶端進行配置  
  
---- 配置方法有兩種:  
  
安裝ORACLE的用戶端軟體時指定  
---- 在安裝ORACLE的用戶端產品軟體時,選擇與ORACLE服務端一致的字元集(本
例為US7ASCII)即可。  
  
修改註冊資訊的方法  
---- 根據ORACLE 用戶端所選sql*net 的版本分為下列兩種情況:  
  
---- a. 用戶端為 sql*net 2.0 以下版本  
  
---- 進入Windows的系統目錄,編輯oracle.ini檔案,用US7ASCII替換原字元
集,重新啟動電腦,設定生效。  
  
---- b. 用戶端為 sql*net 2.0 以上版本  
  
---- 在WIN98 下 運 行REGEDIT,第一步選HKEY_LOCAL_MACHINE,第二步選擇
SOFTWARE, 第三步選擇 ORACLE, 第四步選擇 NLS_LANG, 鍵 入 與服 務 器  
端 相 同 的 字 符 集(本例為:AMERICAN_AMERICAN.US7ASCII)。  
  
---- 2.2 強制載入資料字元集與伺服器端字元集一致  
  
---- 假設要載入資料從原ORACLE資料庫卸出時的字元集為US7ASCII,當前ORACLE
伺服器字元集為WE8ISO8859P1。  
  
---- 下面提供三種解決方案:  
  
---- (1) 伺服器端重新安裝ORACLE  
  
---- 在重新安裝ORACLE 時選擇與原卸出資料一致的字元集(本例為
US7ASCII)。  
  
---- 載入原卸出的資料。  
  
---- 這種情況僅僅使用於空庫和具有同一種字元集的資料。  
  
---- (2)強行修改伺服器端ORACLE當前字元集  
  
---- 在用imp命令載入資料前,先在用戶端用sql*plus登入system DBA使用者,執
行下列SQL語句進行當前ORACLE資料庫字元集修改:  
  
SQL > create database character set US7ASCII
* create database character set US7ASCII
ERROR at line 1:
ORA-01031: insufficient privileges
  
---- 你會發現語句執行過程中,出現上述錯誤提示資訊,此時不用理會,實際上
ORACLE資料庫的字元集已被強行修改為US7ASCII,接著用imp命令裝載資料。等數
據裝載完成以後,shutdown 資料庫,再startup 資料庫,用合法使用者登入ORACLE
資料庫,在sql>命令提示字元下,運行select * from V$NLS_PARAMETERS,可以看
到ORACLE資料庫字元集已複原,這時再查看有漢字字元資料的表時,漢字已能被正
確顯示。  
  
---- (3)利用資料格式轉儲,避開字元集限制  
  
---- 這種方法主要用於載入外來ORACLE資料庫的不同字元集資料。其方法如下:  
  
---- 先將資料載入到具有相同字元集的伺服器上,然後用轉換工具卸出為
foxbase 格式或access格式資料庫,再用轉換工具轉入到不同字元集的ORACLE數
據庫中,這樣就避免了ORACLE字元集的困擾。目前資料庫格式轉換的工具很多,象
power builder5.0以上版本提供的pipeline,Microsoft Access資料庫提供的數
據匯入/匯出功能等。轉換方法參見有關資料說明。.  
  
---- 2.3匹配字元集替換漢字  
  
---- 對於1.3提到的情況,沒有很好的辦法,只能先把用戶端與伺服器端字元集匹  
配一致後,根據原輸入漢字的特徵碼替換漢字字元部分。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.