oracle sqlldr 数据导入时报错:Field in data file exceeds maximum length

使用oracle sqlldr进行数据导入时报Field in data file exceeds maximum length错误:
在ctl文件中设置的数据长度小于实际数据长度
如: column char(2000) 实际数据长度 超过了2000char
这个时候需要增大设置的长度大小
数据库的字段长度设置为varchar2(2000 char) 也需要同时修改为varchar2(4000 char)

如果没有指定设置数据长度
Oracle sqlldr 默认为该字段为VARCHAR(255)

varchar2(size type),size最大为4000,type可为char或者byte,默认是byte。

varchar2最多存放4000字节的数据,不管type是char还是byte。所以如果你设置varchar2(4000
char),你可以存入4000个字母,但是不能存入4000个汉字。如果数据库字符集编码是GBK,那么varchar2最多能存放2000个汉字,如果字符集编码是UTF-8,那么则只能最多存放1333个汉字了。

nvarchar2(size),size最大值为2000,单位是字符,而且不管是汉字还是字母,每个字符的长度都是2个字节。所以nvarchar2类型的数据最多能存放2000个汉字,也最多只能存放2000个字母。并且nvarchar2不同于varchar2,他不受数据库字符集的影响。

另外如果我们把A1,A2都设为varchar2(4000),并且这两个字段的内容长度都超过了2000字节,那么使用select A1||A2
from table这样的语句时,因为结果超过了4000字节,所以会报错。

从使用角度来看区别在于:NVARCHAR2在计算长度时和字符集相关的,例如数据库是中文字符集时以长度10为例,则

1、NVARCHAR2(10)是可以存进去10个汉字的,如果用来存英文也只能存10个字符,而VARCHAR2(10)的话,则只能存进5个汉字,英文则可以存10个
2、VARCHAR2可变长度字符域,最大长度可达4000个字符,NVARCHAR2多字节字符集的可变长度字符域,长度随字符集而定,最多为2000个字符或2000个字节

1.nvarchar中字符为中文则一般按2个字节计算,英文数字等按照一个自己计算
2.nvarchar2中所有字符均按照2个字节计算;
3.nvarchar2虽然更占空间,但是它有更好的兼容性(推荐使用);

猜你喜欢

转载自blog.csdn.net/Hx230/article/details/127103553