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

Oracle中的漢字顯示

2013-11-13 15:36:38  來源: Oracle 

  Oracle以其強大的數據庫管理能力高安全性多用戶操作時數據的一致性贏得了用戶的廣泛青睐獲得了很高的市場占有率但是它在漢字信息顯示時存在多種字符集且相互之間不能通用這就給多數據庫之間的數據共享帶來了一些麻煩
  
  筆者從事Oracle數據庫管理及應用軟件的開發工作多年常遇到Oracle數據庫漢字顯示的問題主要現象是漢字顯示為不可識別的亂碼信息無法使用本文介紹筆者在實際工作中的一點心得與大家一起探討
  
  
  中英文Oracle之間的數據共享
  在筆者的實際工作中有為多個二級廠礦開發的基於Oracle數據庫的應用程序而各個單位所用的Oracle數據庫在安裝時所采用的字符集各不相同有的用英文字符集有的用中文字符集當表中的數據只是數字英文信息時數據共享是可以的; 當表中含有漢字信息時以正常的方式進行共享就看不到漢字了而只會見到一些亂碼下面以Oracle 版的數據庫為例說明解決方法
  
  假設源數據庫是中文字符集目標數據庫是英文字符集利用 Delphi作為轉換工具實際的步驟依據導入和導出有所不同導出數據時步驟如下
  
  > 配置客戶端字符集
  
  首先將本機Oracle客戶端的字符集配置得和源數據庫的字符集一致打開注冊表找到HKEY_LOCAL_MACHINE選下面的SOFTWARE再選Oracle在注冊表中找到NLS_LANG將值改為AMERICAN_AMERICAZHSCGB
  
   配置數據庫別名
  
  用Delphi的工具SQL EXPLORER配置兩個數據庫假名其中DBSOURCE用來連接源數據庫DBMIDDLE用來連接中間數據庫(Paradox表)
  
   導出
  
  打開Delphi的工具Database DeskTop在主菜單中選Tools下面的Utilities再選Copy會彈出一個新的對話框在Alias(數據庫別名)中選擇DBSOURCE並輸入用戶口令在打開的數據庫中選擇需要的表點擊OK按鈕在Alias(數據庫別名)中選擇DBMIDDLE在File Name欄中輸入目標表名點擊COPY按鈕如果顯示: Copy Successfully Completed則數據導出成功
  
  導入數據時步驟如下:
  
   配置客戶端字符集
  
  首先將本機Oracle客戶端的字符集配置得和目標數據庫的字符集一致打開注冊表找到HKEY_LOCAL_MACHINE選下面的SOFTWARE再選Oracle在注冊表中找到NLS_LANG將值改為AMERICAN_AMERICAUSASCII
  
   配置數據庫別名
  
  用Delphi的工具SQL EXPLORER配置一個數據庫別名DBTARGET用來連接目標數據庫
  
   導入
  
  打開Delphi的工具Database DeskTop在主菜單中選Tools下面的Utilities再選Copy會彈出一個新的對話框在Alias(數據庫別名)中選擇DBMIDDLE在打開的數據庫中選擇需要的表點擊OK按鈕在Alias(數據庫別名)中選擇DBTARGET並輸入用戶口令在File Name欄中輸入目標表名點擊COPY按鈕如果顯示: Copy Successfully Completed則數據導入成功此時在目標數據庫中查看導入的表漢字顯示就正常了
  
  
  小型機和PC服務器之間的
  數據共享
  筆者所在公司有小型機Alpha 作為數據庫服務器上面有多個二級單位使用隨著時間的推移數據增加用戶增加小型機不堪重負運行速度緩慢不能滿足日常的工作需要為了緩解這種情況有部分單位自備了PC服務器將數據從小型機上移植下來建立了自己單獨的數據庫
  
  兩個數據庫都安裝的是英文字符集從小型機上導出的數據裝入到PC服務器遇到漢字信息也不能正常顯示這主要是因為兩者的操作系統不同小型機上是VMS系統而PC服務器上是NT 有兩種方法可以解決這個問題:
  
   用仿真終端的方式將數據導出
  
  用Telnet連接到小型機上執行exp將某個用戶的數據庫導出為一個*dmp文件保存在PC服務器上
  
   用FTP將數據取到本機
  
  用FTP連接到小型機上執行bin再執行Get將數據(*dmp文件)以二進制的方式傳輸到本機注意這裡必須用二進制方式否則數據無法正常使用
  
  得到小型機上的數據後再將本機客戶端配置得和PC服務器的字符集一致將數據導入PC服務器數據庫中則一切數據均可使用了
  
  
  數據庫升級 在數據庫的使用中常會遇到Oracle的版本升級如何在保證原來數據安全的情況下將數據庫平穩地升級?這裡分兩種情況
   英文字符集的安裝
  
  如果原來的數據庫安裝采用的是英文字符集則從Oracle 升級到Oracle 只要將數據字典Props$中的參數修改為USASCII即可
  
  以系統DBA的身份登錄SQL*PLUS執行如下的命令修改數據字典
  
  SQL>UPDATE PROPS$ SET VALUE$=USASCIIWHERE NAME=NLS_CHARACTERSET;
  
  SQL>COMMIT;
  
  注意修改後必須重新啟動數據庫配置才起作用然後將從Oracle
  
   中文字符集的安裝
  
  如果原來的數據庫安裝采用的是中文字符集直接將數據導入是否可用呢?不可以漢字顯示為亂碼
  
  原因是Oracle 的中文字符集的參數是ZHSCGB而Oracle 的中文字符集的參數是ZHSGBK兩者不一樣為了能正常地使用必須修改Oracle 的數據字典的參數為ZHSCGB具體的修改步驟如下 用系統DBA的身份登錄SQL*PLUS執行
  
  SQL>UPDATE PROPS$ SET VALUE$=ZHSCGBWHERE NAME=NLS_CHARACTERSET;
  
  SQL>COMMIT;
  
  注意修改後必須重新啟動數據庫配置才起作用然後將從Oracle 導出的數據導入Oracle 的數據庫中即可
  
  

From:http://tw.wingwit.com/Article/program/Oracle/201311/17003.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.