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

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/82317.html

相关文章:

  • 1月第一讲:WxPython跨平台开发框架之前后端结合实现附件信息的上传及管理
  • 【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 1:背景动机
  • 调试:用电脑开发移动端网页,然后用手机真机调试
  • 从安装到调试:GAMS数学建模与优化分析全程指南
  • unity学习5:创建一个自己的3D项目
  • 数字PWM直流调速系统设计(论文+源码)
  • 国产编辑器EverEdit - 常用资源汇总
  • ubuntu开启root用户
  • ruoyi开发学习
  • 【计组不挂科】计算机组成综合习题库(选择题207道&判断题93道&填空题143道)(含答案与解析)
  • 数据挖掘——聚类
  • 【生活】冬天如何选口罩(医用口罩,N95, KN95还是KP95?带不带呼吸阀门?带不带活性炭?)
  • 嵌入式Linux驱动开发的基本知识(驱动程序的本质、常见的设备类型、设备号的本质理解、设备实例的注册过程)
  • Geotrust SSL证书
  • PHP入门笔记汇总
  • CG顶会论文阅读|《科技论文写作》硕士课程报告
  • 51c自动驾驶~合集44
  • Javascript算法——回溯算法(组合问题)
  • 25年1月更新。Windows 上搭建 Python 开发环境:Python + PyCharm 安装全攻略(文中有安装包不用官网下载)
  • 用Tkinter制作一个用于合并PDF文件的小程序
  • linux安装git
  • 【Rust自学】9.4. 什么时候该使用panic!
  • 【Rust自学】9.3. Result枚举与可恢复的错误 Pt.2:传播错误、?运算符与链式调用
  • LeetCode算法题——螺旋矩阵ll
  • Prometheus之终极指南(The Ultimate Guide to Prometheus)
  • 题解:监控屏幕调整问题