oracle impdp 报错ORA-12899: value too large for column XXXX (actual: 45, maximum: 40)

现象:

oracle impdp 报错ORA-12899: value too large for column XXXX (actual: 45, maximum: 40)

原因:

插入的数据长度超出字段的设置长度,实际长度并不长,这是由于Oracle字符集不同,汉字占的长度不同造成的。中文在ZHS16GBK中占2个字节,在UTF-8中却占3个字节,所以汉字导入UTF-8字符集的数据库就很容易出现字段长度不够

解决:

1,查看字符集

用PL/SQL DEVELOP ---->Reports---->DBA---->NLS Database Parameters,结果如下图:

2,修改字符集

sqlplus / as sysdba
SQL>shutdown immediate
SQL>STARTUP MOUNT
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
SQL>SHUTDOWN IMMEDIATE
SQL>STARTUP

3,再查字符集,结果如下

4,修改环境变量 

此时,如果从 plsql developer 里查看发现中文字段值乱码,但通过 sqlplus 查看没有乱码。则需要做下边的。

1)电脑的环境变量中的用户变量中新建一个变量名为NLS_LANG,值为SIMPLIFIED CHINESE_CHINA.ZHS16GBK的变量

2)重启 plsql developer


版权声明:本文为Lbg_007原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。