wap网站乱码,温州建设集团网站首页,成都建工官网,河北网站建设流程一、问题说明
在使用 Kettle 将 DB2 数据迁移到 Oracle 的过程中#xff0c;出现了 DB2 中为空字符串的字段#xff0c;在插入到 Oracle 过程中实际插入的为 NULL #xff0c;导致触发了非空校验而迁移失败
空字符串 ‘’ #xff0c;即长度为0的字符串
搜索该问题后得知…一、问题说明
在使用 Kettle 将 DB2 数据迁移到 Oracle 的过程中出现了 DB2 中为空字符串的字段在插入到 Oracle 过程中实际插入的为 NULL 导致触发了非空校验而迁移失败
空字符串 ‘’ 即长度为0的字符串
搜索该问题后得知 Kettle 默认将空字符串当作 NULL 处理并提供了KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL配置项修改配置项后需要重启 Kettle 生效
二、修改Kettle配置项方法
方法1在 Kettle 图形化页面中修改
点击工具栏中编辑 - 编辑kettle.properties文件将该项的值修改为Y
方法2修改 Kettle 的配置文件
windows系统配置文件路径 C:\Users\用户名\.kettle\kettle.propertieslinux系统配置文件路径 ~/.kettle/kettle.properties
增加下行配置 KETTLE_EMPTY_STRING_DIFFERS_FROM_NULLY 三、大坑
反复确认了自己的配置项修改正确依然无法将空字符串插入到 Oracle 的非空字段中一直以为是Kettle的问题。几天后在一个文档中才偶然得知Oracle对空字符串的处理方式不同于其他数据库 Oracle 中空字符串 ‘’ 被视为 NULL 。
四、总结
在多数的数据库中空字符串和 NULL 通常是不同的空字符串视为一个合法的值表示长度为 0 的字符串 NULL 则表示未知或缺失的值。然而 Oracle 数据库采用了一种不同的设计思想它认为“没有内容”与“未知内容”没有实际差异所以它将两者视为相同。 Oracle空字符串 ‘’ 被视为 NULL它们是相同的。 DB2、MySQL、PostgreSQL、SQL Server、SQLite空字符串 ‘’ 是有效的并且与 NULL 不同。