当前位置: 首页 > news >正文

Pentaho Kettle迁移至Oracle的空字符串和NULL的问题处理,大坑!

一、问题说明

在使用 KettleDB2 数据迁移到 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.properties
  • linux系统配置文件路径 ~/.kettle/kettle.properties

增加下行配置

KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL=Y

三、大坑

反复确认了自己的配置项修改正确,依然无法将空字符串插入到 Oracle 的非空字段中,一直以为是Kettle的问题。几天后在一个文档中才偶然得知,Oracle对空字符串的处理方式不同于其他数据库, Oracle 中空字符串 ‘’ 被视为 NULL 。

四、总结

在多数的数据库中,空字符串和 NULL 通常是不同的,空字符串视为一个合法的值(表示长度为 0 的字符串), NULL 则表示未知或缺失的值。然而 Oracle 数据库采用了一种不同的设计思想:它认为“没有内容”与“未知内容”没有实际差异,所以它将两者视为相同。

  • Oracle:空字符串 ‘’ 被视为 NULL,它们是相同的。

  • DB2、MySQL、PostgreSQL、SQL Server、SQLite:空字符串 ‘’ 是有效的,并且与 NULL 不同。


http://www.mrgr.cn/news/82468.html

相关文章:

  • 【python因果库实战15】因果生存分析4
  • 高效撰写文献综述的指南:利用ChatGPT提升研究能力
  • linux定时执行脚本的方法
  • Vue3 子组件向父组件传递消息(Events)
  • java项目之读书笔记共享平台(源码+文档)
  • 自动生成RESTful API——Spring Data Rest
  • wsl linux CUDA安装、卸载、清理、版本降级、升级过程详解
  • React 中结合 antd 的 Input 组件实现防抖输入
  • 以一个实际例子来学习Linux驱动程序开发之“设备类”的相关知识【利用设备类实现对同一设备类下的多个LED灯实现点亮或关闭】
  • MLAgents - 跑一个Dome
  • python进阶06:MySQL
  • 探索AI在地质科研绘图中的应用:ChatGPT与Midjourney绘图流程与效果对比
  • 【数据库】简答题汇总
  • 企业网络综合组网
  • 被催更了,2025元旦源码继续免费送
  • springboot3 redis 批量删除特定的 key 或带有特定前缀的 key
  • springboot3 redis 常用操作工具类
  • 带虚继承的类对象模型
  • Linux环境(CentOs7) 安装 Node环境
  • 深入浅出梯度下降算法:快速抵达函数最小值的方法
  • Java Web开发基础——Java Web项目的结构与组织
  • 【网络】ARP表、MAC表、路由表
  • 【Rust自学】10.2. 泛型
  • 【人工智能】人工智能与大模型
  • ctfshow 每日练习 web 区 php特性 1-10
  • kubernetes学习-kubectl命令、探针(二)