IMP出现的ORA-01401错误可能和字符集有关(转载)
今天在論壇上,看到有一位朋友問
“我備份數據庫后在其他的機器上再導入這個數據庫,出現如下錯誤,并只能導
入部分數據。
IMP-00019: row rejected due to ORACLE error 1401
IMP-00003: ORACLE error 1401 encountered
ORA-01401: inserted value too large for column
我裝的是ORACLE8.1.7,最后出現column 1 66790 的提示。
該怎么解決?”
我第一想到,IMP會自動創建表,因此,和表字段長度定義不一致顯然無關。
那么可能可以解釋的就是,字符集的不一致,導致相同的字符,存儲空間需求不一致。
exp從一個single byte字符集的數據庫,而imp的是一個多字符集的數據庫,就有可能出現這樣的問題。如WE8ISO8859P1->UTF8
證明如下:
我的數據庫采用WE8ISO8859P1字符集。
?? 我們來看看,你好這個字符的存儲字節情況。
?? SQL> select dump('你好',16) from dual;
?? DUMP('拿好',16)
?? -------------------------
?? Typ=96 Len=4: c4,e3,ba,c3
*需要4個字節
?而UTF8情況下呢,
?SQL> select dump(convert('你好','UTF8','WE8ISO8859P1'),16) from dual;
DUMP(CONVERT('拿好','UTF8','WE8ISO88
------------------------------------
Typ=1 Len=8: c3,84,c3,a3,c2,ba,c3,83?
*需要8個字節
因此,當DUMP文件內容被IMP到UTF8的表中,就需要8個字節,使原來的一倍,那么顯然就會導致ORA-01401: inserted value too large for column的錯誤。
轉載于:https://www.cnblogs.com/firstyi/archive/2007/10/17/927562.html
總結
以上是生活随笔為你收集整理的IMP出现的ORA-01401错误可能和字符集有关(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在.Net如何制作自定义的快捷方式(转)
- 下一篇: ewebeditor遍历路径漏洞