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