当前位置: 首页 > 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.lryc.cn/news/515395.html

相关文章:

  • 「Mac畅玩鸿蒙与硬件50」UI互动应用篇27 - 水果掉落小游戏
  • 2.C语言基础:语句、表达式、注释与标准库简介
  • Python 基于 opencv 的人脸识别监控打卡系统(源码+部署)
  • Maven的依赖管理
  • 数据结构考前一天
  • 获取 Astro Bot AI 语音来增强您的游戏体验!
  • html5开发,js 在元素div id=img1的最前面插入一个图片
  • Elasticsearch Serverless中的数据流自动分片深度解析
  • 2025考研江南大学复试科目控制综合(初试807自动控制原理)
  • Elasticsearch分片数量是什么意思?
  • PWN的知识之栈溢出
  • java.lang.Error: FFmpegKit failed to start on brand:
  • TCPDump参数详解及示例
  • Spring如何实现管理事务
  • windows C#-接口中的索引器
  • Launcher3主页面加载显示流程分析
  • 【读书笔记·VLSI电路设计方法解密】问题36:一个好的设计流程有哪些特点
  • C语言----共用体、枚举
  • 26.Java Lock 接口(synchronized 关键字回顾、可重入锁快速入门、Lock 对比 synchronized)
  • 机器学习 学习知识点
  • GESP真题 | 2024年12月1级-编程题4《美丽数字》及答案(C++版)
  • java并发之AQS
  • 4 种修复 IPhone 备份输入密码解锁的方法
  • 选课(贪心)
  • 【深度学习】Java DL4J基于 LSTM 构建新能源预测模型
  • 【linux基础I/O(1)】文件描述符的本质重定向的本质
  • 微服务架构下的慢请求排查与优化策略
  • C++ 中 Unicode 字符串的宽度
  • 人工智能在SEO中的应用与关键词优化策略
  • spring mvc源码学习笔记之四