日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Oracle漢字顯示字符集的原因分析

如果你想更好的了解Oracle漢字顯示的字符集問題的相關內(nèi)容的話,你就必須的了解Oracle漢字顯示的字符集實際操作,以下就是Oracle漢字顯示的字符集問題相關內(nèi)容的具體介紹,希望你在瀏覽完此篇文章之后會有會所了解。

成都創(chuàng)新互聯(lián)公司專注于和平企業(yè)網(wǎng)站建設,響應式網(wǎng)站,商城網(wǎng)站開發(fā)。和平網(wǎng)站建設公司,為和平等地區(qū)提供建站服務。全流程按需求定制開發(fā),專業(yè)設計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務

在國內(nèi)外大中型數(shù)據(jù)庫管理系統(tǒng)中,把Oracle作為數(shù)據(jù)庫管理平臺的用戶比較多。Oracle 不論是數(shù)據(jù)庫管理能力還是安全性都是無可非議的,但是,它在漢字信息的顯示方面著實給中國用戶帶來不少麻煩,筆者多年從事Oracle數(shù)據(jù)庫管理,經(jīng)常收到周圍用戶和外地用戶反映有關Oracle數(shù)據(jù)庫漢字顯示問題的求援信.

主要現(xiàn)象是把漢字顯示為不可識別的亂碼,造成原來大量信息無法使用。本文將就這一問題產(chǎn)生的原因和解決辦法進行一些探討,供存在這方面問題的用戶朋友參考。

1、原因分析

通過對用戶反映情況的分析,發(fā)現(xiàn)字符集的設置不當是影響Oracle數(shù)據(jù)庫漢字顯示的關鍵問題。那么字符集是怎么一會事呢?字符集是Oracle 為適應不同語言文字顯示而設定的。用于漢字顯示的字符集主要有ZHS16CGB231280,US7ASCII,WE8ISO8859P1等。字符集不僅需在服務器端存在,而且客戶端也必須有字符集注冊。

服務器端,字符集是在安裝Oracle時指定的,字符集登記信息存儲在Oracle數(shù)據(jù)庫字典的V$NLS_PARAMETERS表中;客戶端,字符集分兩種情況,一種情況是sql*net 2.0以下版本,字符集是在windows的系統(tǒng)目錄下的Oracle.ini文件中登記的;另一種情況是sql*net 2.0以上(即32位)版本,字符集是在windows的系統(tǒng)注冊表中登記的。

要在客戶端正確顯示Oracle 數(shù)據(jù)庫漢字信息,首先必須使服務器端的字符集與客戶端的字符集一致;其次是加載到Oracle數(shù)據(jù)庫的數(shù)據(jù)字符集必須與服務器指定字符集一致。因此,把用戶存在的問題歸納分類,產(chǎn)生Oracle漢字顯示異常的原因大致有以下幾種:

1. 1服務器指定字符集與客戶字符集不同,而與加載數(shù)據(jù)字符集一致。

這種情況是最常見的,只要把客戶端的字符集設置正確即可,解決辦法見2.1。

1. 2服務器指定字符集與客戶字符集相同,與加載數(shù)據(jù)字符集不一致。

這類問題一般發(fā)生在Oracle版本升級或重新安裝系統(tǒng)時選擇了與原來服務器端不同的字符集,而恢復加載的備份數(shù)據(jù)仍是按原字符集卸出的場合,以及加載從其它使用不同字符集的Oracle數(shù)據(jù)庫卸出的數(shù)據(jù)的情況。這兩種情況中,不管服務器端和客戶端字符集是否一致都無法顯示漢字。解決辦法見2.2。

1.3服務器指定字符集與客戶字符集不同,與輸入數(shù)據(jù)字符集不一致。

這種情況是在客戶端與服務器端字符集不一致時,從客戶端輸入了漢字信息。輸入的這些信息即便是把客戶端字符集更改正確,也無法顯示漢字。解決辦法見2.3。

2.解決辦法

下面將分別對上述三種情況給出解決辦法。為了敘述方便,假設客戶端使用WINDOWS95/98環(huán)境,并已成功地配置了TCP/IP協(xié)議,安裝了Oracle的sql*net,sql*pluse產(chǎn)品。

2.1 設置客戶端字符集與服務器端字符集一致

假設當前服務器端使用US7ASCII字符集。

(1)查看服務器端字符集

通過客戶端或服務器端的sql*plus登錄Oracle的一個合法用戶,執(zhí)行下列SQL語句:

 

 
 
 
  1. SQL > select * from V$NLS_PARAMETERS   
  2. parameter value   
  3. NLS_LANGUAGE AMERICAN   
  4. NLS_TERRITORY AMERICA   
  5. …. ….   
  6. NLS_CHARACTERSET US7ASCII   
  7. NLS_SORT BINARY   
  8. NLS_NCHAR_CHARACTERSET US7ASCII 

 

 

從上述列表信息中可看出服務器端Oracle數(shù)據(jù)庫的字符集為US7ASCII。

(2)按照服務器端字符集對客戶端進行配置

配置方法有兩種:

安裝Oracle的客戶端軟件時指定

在安裝Oracle的客戶端產(chǎn)品軟件時,選擇與Oracle服務端一致的字符集(本例為US7ASCII)即可。

 

修改注冊信息的方法

根據(jù)Oracle 客戶端所選sql*net 的版本分為下列兩種情況:

 

a. 客戶端為 sql*net 2.0 以下版本

進入Windows的系統(tǒng)目錄,編輯Oracle.ini文件,用US7ASCII替換原字符集,重新啟動計算機,設置生效。

b. 客戶端為 sql*net 2.0 以上版本

在WIN98 下 運 行REGEDIT,第一步選HKEY_LOCAL_MACHINE,第二步選擇SOFTWARE, 第三步選擇 Oracle, 第四步選擇 NLS_LANG, 鍵 入 與服 務 器 端 相 同 的 字 符 集(本例為:AMERICAN_AMERICAN.US7ASCII)。

2.2 強制加載數(shù)據(jù)字符集與服務器端字符集一致

假設要加載數(shù)據(jù)從原Oracle數(shù)據(jù)庫卸出時的字符集為US7ASCII,當前Oracle服務器字符集為WE8ISO8859P1。

下面提供三種解決方法:

(1) 服務器端重新安裝Oracle

在重新安裝Oracle 時選擇與原卸出數(shù)據(jù)一致的字符集(本例為US7ASCII)。

加載原卸出的數(shù)據(jù)。

這種情況僅僅使用于空庫和具有同一種字符集的數(shù)據(jù)。

(2)強行修改服務器端Oracle當前字符集

在用imp命令加載數(shù)據(jù)前,先在客戶端用sql*plus登錄system DBA用戶,執(zhí)行下列SQL語句進行當前Oracle數(shù)據(jù)庫字符集修改:

 

 
 
 
  1. SQL > create database character set US7ASCII   
  2. * create database character set US7ASCII   
  3. ERROR at line 1:   
  4. ORA-01031: insufficient privileges 

 

 

你會發(fā)現(xiàn)語句執(zhí)行過程中,出現(xiàn)上述錯誤提示信息,此時不用理會,實際上Oracle數(shù)據(jù)庫的字符集已被強行修改為US7ASCII,接著用imp命令裝載數(shù)據(jù)。等數(shù)據(jù)裝載完成以后,shutdown 數(shù)據(jù)庫,再startup 數(shù)據(jù)庫,用合法用戶登錄Oracle數(shù)據(jù)庫,在sql>命令提示符下,運行select * from V$NLS_PARAMETERS,可以看到Oracle數(shù)據(jù)庫字符集已復原,這時再查看有漢字字符數(shù)據(jù)的表時,漢字已能被正確顯示。

(3)利用數(shù)據(jù)格式轉(zhuǎn)儲,避開字符集限制

這種方法主要用于加載外來Oracle數(shù)據(jù)庫的不同字符集數(shù)據(jù)。其方法如下:

先將數(shù)據(jù)加載到具有相同字符集的服務器上,然后用轉(zhuǎn)換工具卸出為foxbase 格式或access格式數(shù)據(jù)庫,再用轉(zhuǎn)換工具轉(zhuǎn)入到不同字符集的Oracle數(shù)據(jù)庫中,這樣就避免了Oracle字符集的困擾。目前數(shù)據(jù)庫格式轉(zhuǎn)換的工具很多,象power builder5.0以上版本提供的pipeline,Microsoft Access數(shù)據(jù)庫提供的數(shù)據(jù)導入/導出功能等。轉(zhuǎn)換方法參見有關資料說明。.

2.3匹配字符集替換漢字

對于1.3提到的情況,沒有很好的辦法,只能先把客戶端與服務器端字符集匹配一致后,根據(jù)原輸入漢字的特征碼替換漢字字符部分。

 

NLS_CHARACTERSET是數(shù)據(jù)庫字符集,NLS_NCHAR_CHARACTERSET是國家字符集

 

Oracle中有兩大類字符型數(shù)據(jù),VARCHAR2是按照數(shù)據(jù)庫字符集來存儲數(shù)據(jù)。而NVARCHAR2是按照國家字符集存儲數(shù)據(jù)的。同樣,CHAR和NCHAR也一樣,一是數(shù)據(jù)庫字符符,一是國家字符集。

 

字符集不同,二進制碼的組合就不同。

 

比如有一串二進制信息:1101,0110,1101,0000,1011,1001,1111,1010,按照16位雙字節(jié)GBK字符集理解,可以代表“中國”兩個字。如果單字節(jié)的字符集,這一串二進制代表ASC碼為214、208、185、250的四個怪字符。

 

這就是字符集的作用,就是以什么樣的形式理解信息。

 

以上的相關內(nèi)容就是對Oracle漢字顯示的字符集問題的介紹,望你能有所收獲。

【編輯推薦】

  1. Oracle merge into的實操示例
  2. 成為成功Oracle DBA的六個必備思想
  3. Oracle11g用于中型企業(yè)很合適的原因
  4. 調(diào)用Oracle存儲過程的兩大步驟
  5. 獲得Oracle DBA工作并不難

分享題目:Oracle漢字顯示字符集的原因分析
當前網(wǎng)址:http://www.dlmjj.cn/article/dhdosis.html