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客戶端與資料庫編碼不一致所導致。亂碼問題在各類技術很多地方都普遍可能存在,其根本原因主要是資料編碼不一致導致。根據其原理排查資料編碼,基本都...