oracle資料庫字符集編碼問題

2021-08-30 09:21:18 字數 3301 閱讀 1387

1,查詢資料庫伺服器字符集,其**於props$,是表示資料庫的字符集

select * from nls_database_parameters;
2,客戶端字符集環境select   *   from   nls_instance_parameter,其**於v$parameter,表示客戶端的字符集的設定,可能是引數檔案,環境變數或者是登錄檔

3,會話字符集環境   select   *   from   nls_session_parameter,其**於v$nls_parameters,表示會話自己的設定,可能是會話的環境變數或者是alter   session完成,如果會話沒有特殊的設定,將與nls_instance_parameter一致。

客戶端的字符集要求與伺服器一致,才能正確顯示資料庫的非ascii字元。如果多個設定存在的時候,alter   session>環境變數》登錄檔》引數檔案    

字符集要求一致,但是語言設定卻可以不同,語言設定建議用英文。如字符集是zhs16gbk,則nls_lang可以是american_america.zhs16gbk。

4,修改資料庫字符集

1、nls_lang引數的修改方法:

1)用sys使用者名稱登陸oracle。

2)檢視字符集內容

sql>select * from props$;

3)修改相應的字元子集

sql>update props$ set value$=』simplified chinese 『

where name=』nls_language』;

4) 遞交commit;

oracle10g可以採用下面的方法

connect system as sysdba ;

shutdown immediate ;

startup mount ;

alter system enable restricted session ;

alter system set job_queue_processes=0;

alter system set aq_tm_processes=0;

alter database open ;

alter database character set internal_use zhs16gbk ;

shutdown immediate ;

startup ;

老版本可以參考

startup mount; 

alter system enable restricted session;

alter system set job_queue_processes=0;

alter system set aq_tm_processes=0;

alter database open;

alter database character set zhs16gbk;

alter database national character set zhs16gbk;

shutdown immediate;

startup;

下面提供三種解決方法:

(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資料庫提供的數

據匯入/匯出功能 等。轉換方法參見有關資料說明。

還有乙個方法,沒有試驗過,僅供參考:

修改oracle資料庫匯出的dmp的字符集

我們修改資料庫字符集的時候可以通過exp匯出資料庫後通過修改dmp檔案來實現

具體步驟如下:

1、使用ue開啟dmp檔案取得第2、3位元組的內容,如 00 01,轉換成十進位制為1

2、檢視匯出的dmp的字符集

select nls_charset_name(1) from dual;

sql> select nls_charset_name(1) from dual;

nls_charset_name(1)

-------------------

us7ascii

3、檢視需要轉換的字符集對應的id

select nls_charset_id('zhs16gbk') from dual;

sql> select nls_charset_id('zhs16gbk') from dual;

nls_charset_id('zhs16gbk')

--------------------------

8524、將查詢出的字符集id值轉換成16進製制數,852轉換成16進製為 03 45

將dmp檔案中的第2、3位元組的內容 00 01替換成 03 45

即完成字符集由us7ascii轉換成zhs16gbk

oracle 資料庫字符集

oracle全球支援 即globalization support 允許我們使用本地語言和格式來儲存和檢索資料。通過全球支援,oracle可以支援多種語言及字符集,得以展示資料庫的強大魅力。1 字符集的基本知識 如果從頭說起,字符集最早的編碼方案來自於與ascii.這也是我們最常見的編碼方式。該方案...

oracle資料庫字符集

一 什麼是oracle字符集 oracle字符集是乙個位元組資料的解釋的符號集合,有大小之分,有相互的包容關係。oracle 支援國家語言的體系結構允許你使用本地化語言來儲存,處理,檢索資料。它使資料庫工具,錯誤訊息,排序次序,日期,時間,貨幣,數字,和日曆自動適應本地化語言和平台。影響oracle...

oracle資料庫亂碼解決,字符集編碼問題

在將其它資料庫的資料匯出檔案匯入本地新建資料庫時,所匯入的資料全部是亂碼,一般表現為資料表中列的值類似於 即內容大部分為?的表現形式。初步判斷是因為oracle客戶端與資料庫編碼不一致所導致。亂碼問題在各類技術很多地方都普遍可能存在,其根本原因主要是資料編碼不一致導致。根據其原理排查資料編碼,基本都...