前端时间在使用sqlload导入客户提供的数据后,今天发现导入的数据后面全都多了一个字符,后来发现不是误加入的空格,是因为windows 与linux 下的回车符与换行符的区别造成。

Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“ <回车><换行>”,即“\r\n”;Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行.。

因此如果导入数据库的文件是在windows 下编辑的,那么所有行的末尾都会添加“ <回车><换行>”,即“\r\n”,

而在linux 下 默认只有换行符没有回车, 因此在导入数据库时,oracle就会将windows的回车符也一起导入数据库,其中回车符占用一个字节,我们可以使用length 函数查看到。

从而我们在查看数据时,无法对看到的数据进行精确匹配而只能进行模糊匹配。

修改方法:

去掉回车符:

update t3 set id=replace(id,chr(13),'') ;

去除空格符:

update table set fa=replace(fa,' ','') ;


制表符: CHAR(9)
换行符: CHAR(10)
回车符: CHAR(13)