您的位置:首页 > 其它

IMP出现的ORA-01401错误可能和字符集有关(转载)

2007-10-17 14:34 525 查看
今天在论坛上,看到有一位朋友问

“我备份数据库后在其他的机器上再导入这个数据库,出现如下错误,并只能导

入部分数据。

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的错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐