採用exp匯入zhs16gbk雙位元組字元到utf8三位元組字元
源於看到itpub sundog315大牛的貼子,
http://www.itpub.net/thread-339220-1-2.html
自己也測試了下
比如對於漢字:
勳楊
utf8 字符集
SQL> select dump('勳楊') from dual;
DUMP('勳楊')
-------------------------------------
Typ=96 Len=6: 229,139,139,230,157,168 ##佔用6個位元組,後跟6個數字喲
zhs16gbk字符集
SQL> select dump('勳楊') from dual;
DUMP('勳楊')
--------------------------------------------------------------------------------
Typ=96 Len=4: 209,171,209,238 ##佔用4個位元組,後跟4個數字喲
我在zhs16gbk字符集資料庫中建立一個mig使用者的表test
SQL> create table test(a int,b varchar2(4));--注意:這裡長度是4,因為zhs16gbk漢字佔用2個位元組
Table created.
SQL> insert into test values(1,'勳楊');##插入測試資料
然後用imp把以上資料匯入到utf8的資料庫中,就報
-bash-3.1$ imp userid=system/system fromuser=mig touser=mig file=/oracle/exp_mig.dmp log=imp_two_set.log
Import: Release 10.2.0.4.0 - Production on 星期六 7月 31 10:22:25 2010
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export file created by EXPORT:V10.02.01 via conventional path
import done in UTF8 character set and AL16UTF16 NCHAR character set
. importing MIG's objects into MIG
. . importing table "TEST"
IMP-00019: row rejected due to ORACLE error 12899
IMP-00003: ORACLE error 12899 encountered
ORA-12899: value too large for column "MIG"."TEST"."B" (actual: 6, maximum: 4)
Column 1 1
Column 2 勳楊 0 rows imported
Import terminated successfully with warnings.
###上面報長度不對,就是因為不同字符集對於漢字的儲存長度不同,佔用長度不同
所以只能改寫dmp檔案涉及到varchar,varchar2,char的地方,本文就直接用sed修改dmp
strings exp_mig.dmp ##先大約檢視下出錯的地方
sed -i 's/VARCHAR2(4)/VARCHAR2(6)/g' exp_mig.dmp
再次從zhs16gbk到utf8 imp資料,就好了
-bash-3.1$ imp userid=system/system fromuser=mig touser=mig file=/oracle/exp_mig.dmp log=imp_two_set.log
Import: Release 10.2.0.4.0 - Production on 星期六 7月 31 10:30:41 2010
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export file created by EXPORT:V10.02.01 via conventional path
import done in UTF8 character set and AL16UTF16 NCHAR character set
. importing MIG's objects into MIG
. . importing table "TEST" 1 rows imported
Import terminated successfully without warnings.
-bash-3.1$ sqlplus mig/system
SQL*Plus: Release 10.2.0.4.0 - Production on 星期六 7月 31 10:30:43 2010
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select * from test;
A B
---------- ------
1 勳楊
SQL> exit
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-670056/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 正規表示式匹配雙位元組字元字元
- java入門(字元流、位元組流)Java字元
- 字元,位元組和編碼字元
- 匹配雙位元組字元的正規表示式字元
- Oracle實驗(01):字元 & 位元組Oracle字元
- 計算返回單、雙位元組字元混合字串長度字元字串
- 匹配雙位元組字元的正規表示式程式碼字元
- Python字元與位元組新編Python字元
- 字元型別的字元儲存與位元組儲存字元型別
- 位(bit/b)、位元組(byte/B)、字元字元
- 關於字元 位元組 python3字元Python
- 彙編——位元組單元和字單元儲存雙字元字元
- 匹配雙位元組字元的正規表示式程式碼例項字元
- 得到字串 位元組 長度 中文 兩個字元 英文一個字元字串字元
- 面試必問的 Java 位元組流與字元流面試Java字元
- utf-8字元所佔位元組數字元
- JavaIO流(一)-位元組輸入流與字元輸入流JavaAI字元
- java的IO操作:位元組流與字元流操作Java字元
- nodejs字元與位元組之間的轉換NodeJS字元
- java位元組流和字元流的比較哦啊Java字元
- GBase 8a中一個字元佔用位元組數說明字元
- 雙位元組中文字符集匯出的DMP檔案匯入UTF8字符集
- Java基礎(八)——IO流1_位元組流、字元流Java字元
- 通過oracle類比MySQL中的位元組字元問題OracleMySql字元
- 字元編碼發展史6 — BOM位元組序標記字元
- Java的位元組流,字元流和緩衝流對比探究Java字元
- Java提高篇(二):IO位元組流、字元流和處理流Java字元
- 字串的長度,是字元數量,還是位元組數量?字串字元
- java io 多種檔案操作方式(位元組、字元、行、隨機)Java字元隨機
- 位元組流
- Go 語言之父帶你重新認識字串、位元組、rune 和字元Go字串字元
- 129.(位元組流、字元流)對檔案進行讀寫操作字元
- Java 位元組碼Java
- 理解位元組序
- 位元組對齊
- 位元組碼指令
- Java基本型別佔用的位元組數(char佔用幾個位元組問題)Java型別
- 【C/C++】5.位元組對齊和位元組填充C++