国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

影響ORACLE漢字顯示的字符集

2024-08-29 13:31:54
字體:
來源:轉載
供稿:網友
在國內外大中型數據庫管理系統中,把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提到的情況,沒有很好的辦法,只能先把客戶端與服務器端字符集匹配一致后,根據原輸入漢字的特征碼替換漢字字符部分。
菜鳥學堂:
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 杭锦旗| 洛隆县| 祁门县| 邓州市| 安徽省| 沂水县| 扬中市| 隆林| 天峻县| 湘乡市| 铁岭市| 万年县| 策勒县| 秀山| 怀柔区| 农安县| 略阳县| 托里县| 同仁县| 利津县| 渭南市| 秭归县| 达尔| 化州市| 滦平县| 澄迈县| 神池县| 江永县| 新化县| 合阳县| 甘肃省| 读书| 长乐市| 龙川县| 晋江市| 家居| 红安县| 桦南县| 衡山县| 共和县| 通州市|