在imp乙個dmp檔案的時候,提示不支援要求的字符集轉換(從型別850到852).
原理:oracle多國語言設定是為了支援世界範圍的語言與字符集,一般對語言提示,貨幣形式,排序方式和char,varchar2,clob,long欄位的資料的顯示等有效。oracle的多國語言設定最主要的兩個特性就是國家語言設定與字符集設定,國家語言設定決定了介面或提示使用的語言種類 ,字符集決定了資料庫儲存與字符集有關資料(如文字)時候的編碼規則。
oracle字符集設定,分為資料庫字符集和客戶端字符集環境設定。在資料庫端,字符集在建立資料庫的時候設定,並儲存在資料庫props$表中,對於8i以上產品,已經可以採用'alter database character set 字符集'來修改資料庫的字符集,但也僅僅是從子集到超集,不要通過update props$來修改字符集,如果是不支援的轉換,可能會失去所有與字符集有關的資料,就是支援的轉換,也可能導致資料庫的不正常工作。字符集分為單位元組字符集與多位元組字符集,us7ascii就是典型的單位元組字符集,在這種字符集中length=lengthb,而zhs16gbk就是常用的雙位元組字符集,在這裡lengthb=2*length。
在客戶端的字符集環境比較簡單,主要就是環境變數或登錄檔項nls_lang,注意nls_lang的優先級別為:引數檔案à登錄檔à環境變數àalter session。nls_lang的組成為「國家語言設定.字符集」,如nls_lang=simplified chinese_china.zhs16gbk。客戶端的字符集最好與資料庫端一樣(國家語言設定可以不一樣,如zhs16gbk的字符集,客戶端可以是nls_lang =simplified chinese_china.zhs16gbk或ameircan_america.zhs16gbk,都不影響資料庫字元的正常顯示),如果字符集不一樣,而且字符集的轉換也不相容,那麼客戶端的資料顯示與匯出/匯入的與字符集有關的資料將都是亂碼。
方案:使用2進製檔案編輯工具,如uedit32。開啟匯出的dmp檔案,獲取2、3位元組的內容,如00 01,先把它轉換為10進製數,為1,使用函式nls_charset_name即可獲得該字符集:
sql> select nls_charset_name(1) from dual;
nls_charset_name(1)
-------------------
us7ascii
可以知道該dmp檔案的字符集為us7ascii,如果需要把該dmp檔案的字符集換成zhs16gbk,則需要用nls_charset_id獲取該字符集的編號:
sql> select nls_charset_id('zhs16gbk') from dual;
nls_charset_id('zhs16gbk')
--------------------------
852
把852換成16進製制數,為354,把2、3位元組的00 01換成03 54,即完成了把該dmp檔案字符集從us7ascii到zhs16gbk的轉化,這樣,再把該dmp檔案匯入到zhs16gbk字符集的資料庫就可以了。
關於Oracle設定字符集
網上很多,說的比較明白的個人推薦 參考 oracle 客戶端 nls lang 的設定 不用修改全部,只修改最後一部分即可,前半部分作為提示語言使用,如果前半部分不能匹配,只是oracle提示會出現?simplified chinese china.zhs16gbk american america...
字符集 國家字符集及NLS LANG執行庫
unicode編碼方案 三個實施標準 utf 8,usc 2,utf 16 oracle資料庫字符集 字符集character set 國家字符集national character set 字符集主要作用 用於儲存varchar2,char,clob,long型別資料 標示表名,列名,以及pl s...
oracle 檢視字符集與修改字符集
oracle字符集是乙個位元組資料的解釋的符號集合,有大小之分,有相互的包容關係。oracle 支援國家語言的體系結構允許你使用本地化語言來儲存,處理,檢索資料。它使資料庫工具,錯誤訊息,排序次序,日期,時間,貨幣,數字,和日曆自動適應本地化語言和平台。影響oracle資料庫字符集最重要的引數是nl...