运行环境:kettle7.1
描述场景:在向mysql数据库插入数据的时候运行报错,提示(1366 - Incorrect integer value: '')的相关错误。
查找具体数据发现在向数据插入某个字段的时候该字段值为空字符串('')
PS:向mysql的表中插入空字符串时,如果被插入的字段数据类型为varchar
insert into vital_sign (id,care_address) values (1101111,'');
message
insert into vital_sign (id,care_address) values (1101111,'')
> Affected rows: 1
> Time: 0.032s
如果字段数据类型为int
insert into vital_sign (id,type) values (1101111,'');
message:
insert into vital_sign (id,type) values (1101111,'')
> 1366 - Incorrect integer value: '' for column 'type' at row 1
> Time: 0.001s
insert into vital_sign (id,type) values (1101111,null);
message:
insert into vital_sign (id,type) values (1101111,null)
> Affected rows: 1
> Time: 0.025s
分析:kettle默认情况下把空字符串当作NULL处理,如果采用默认设置的话不会出现上边的错误。但是之前因为转换的需要向mysql表中插入数据时被插入的字段设置的不能为空(not null),所以把这个默认设置修改一下了。
当时修改方法:
windows系统
在C:\Users\用户名\.kettle目录中找到kettle.properties文件,增加:
KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL=Y
重启Kettle
linux系统(centos7)
进入当前用户的默认目录
cd /home/pentaho/.kettle
在/home/pentaho/.kettle 文件中增加:KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL=Y
如果变回默认设置,其他的转换就会报错,所以只能通过js代码把空字符串转化为null
var body_weightNew=body_weight==''?null:body_weight;