参数 ora_input_emptystr_isnull 对于数据存储的影响

article/2023/6/3 15:38:18

原生的PG 对于 '' 和 null 认为是不同值:空值 和不确定值;而oracle 认为二者都是不确定的值。KingbaseES 为了兼容Oracle,增加了参数ora_input_emptystr_isnull,用于控制 '' 和 null 的比较。

一、Oracle null and '' 比较

SQL> create table t1(id number,name varchar(9));Table created.SQL> insert into t1(id) values(1);1 row created.SQL> insert into t1 values(2,'');    --注意,中间没有空格。有空格就不是null1 row created.SQL> insert into t1 values(3,null);1 row created.SQL> select * from t1 where name is null;ID NAME
---------- ---------123SQL> select * from t1 where name='';no rows selectedSQL> select length(name) from t1;LENGTH(NAME)
------------SQL>

可以看到,不管插入 null or '',Oracle 都看做 null。

二、KingbaseES

1、ora_input_emptystr_isnull=off

test=# show ora_input_emptystr_isnull;
ora_input_emptystr_isnull
---------------------------
off
(1 row)
test=# create table t1(id number,name varchar(9));
CREATE TABLE
test=# insert into t1(id) values(1);
INSERT 0 1
test=# insert into t1 values(2,'');   
INSERT 0 1
test=# insert into t1 values(3,null);
INSERT 0 1
test=# select * from t1 where name is null;id | name 
----+------1 | 3 | 
(2 rows)test=# select * from t1 where name='';     id | name 
----+------2 | 
(1 row)test=# select id,length(name) from t1;
id | length
---+--------
1 |
2 | 0
3 |
(3 rows)

结论:当ora_input_emptystr_isnull=off时,null 和 '' 实际不同的。

在数据插入后,将参数改成on,看下查询的不同结果:

test=# show ora_input_emptystr_isnull;ora_input_emptystr_isnull 
---------------------------on
(1 row)test=# select * from t1 where name='';       --这个也没结果,这个数据“丢失“了id | name 
----+------
(0 rows)test=# select * from t1 where name is null;id | name 
----+------1 | 3 | 
(2 rows)test=# select id,length(name) from t1;id | length 
----+--------1 |       2 |      03 |       
(3 rows)

结论:当数据保存到数据库时,会根据参数ora_input_emptystr_isnull 保存为不同格式,后续的参数修改不影响已存储的数据。

2、ora_input_emptystr_isnull=on

test=# show ora_input_emptystr_isnull;
ora_input_emptystr_isnull
---------------------------
on
(1 row)test=# drop table t1;
DROP TABLE
test=# create table t1(id number,name varchar(9));
CREATE TABLE
test=# insert into t1(id) values(1);
INSERT 0 1
test=# insert into t1 values(2,'');   
INSERT 0 1
test=# insert into t1 values(3,null);
INSERT 0 1
test=# select * from t1 where name=''; id | name 
----+------
(0 rows)test=# select * from t1 where name is null;id | name 
----+------1 | 2 | 3 | 
(3 rows)test=# select id,length(name) from t1;id | length 
----+--------1 |       2 |       3 |       
(3 rows)

将参数改为off ,看下执行结果

test=# set ora_input_emptystr_isnull=off;
SET
test=# select * from t1 where name is null;id | name 
----+------1 | 2 | 3 | 
(3 rows)test=# select * from t1 where name=''; id | name 
----+------
(0 rows)

结论:将参数改为off后,执行结果不变。

注意:由于参数 ora_input_emptystr_isnull不同设置,会修改实际的数据存储,为了保证数据不发生“丢失”,建议用户在系统初始化后就确定参数 ora_input_emptystr_isnull 的值,避免后续数据入库后再去修改参数。

http://www.ngui.cc/article/show-861275.html

相关文章

C++11中类的默认函数

C11中类的默认函数 1.类的默认函数 在C中声明自定义类时,编译器会默认帮助程序员生成一些它们未定义的成员函数,这些函数就叫做默认函数。 假设我们的自定义类为 struct A{};首先是6个构造,赋值,析构相关的默认成员函数: 构造函数:A()拷贝构造函数:A(const A&)或A(A&a…

fortran教程4:判断和循环语句

文章目录判断语句select case语句do循环while循环exit, cycle, stop前情提要: 1 安装和编译💎 2 数据类型💎 3 过程和子过程判断语句 fortran的if语句,有if和end if包裹,判断条件后的执行语句,由then开…

【Linux】第八部分 Linux常用基本命令

【Linux】第八部分 Linux常用基本命令 文章目录【Linux】第八部分 Linux常用基本命令8. Linux常用基本命令8.1 帮助命令8.2 文件目录类命令pwd 显示当前工作目录的绝对路径cd 切换目录ls 列出目录的内容mkdir 创建目录rmdir 删除目录touch 创建文件cp 复制文件或者目录rm 删除文…

软件测试-移动端测试-元素定位-元素等待-笔记

元素等待目标1.能够使用隐式等待来定位元素2.能够使用显式等待来定位元素应用场景可能由于一些原因,我们想找的元素并没有立刻出来,此时如果直接定位可能会报错,比如以下原因:1.由于网络速度原因2.服务器处理请求原因3.电脑配置原…

软件测试基础(五) 之 了解测试团队的组织架构

今天来了解一下软件测试团队的组织架构模式到底是什么样子。测试团队的组织架构模式的分类一个公司软件测试的组织架构,可能会决定你未来的成长空间,同时也决定了我们的工作模式到底是什么样子。现在测试行业内通常测试团队的组织架构主要分成两种&#…

青龙+WxPusher实现资产推送

1.首先注册WXpusher: https://wxpusher.zjiecode.com/admin/login 扫码注册创建应用 确定完就会出现一个token,一定先复制保存起来,因为只显示一次,没存后期就只能重置了。 关闭后,这个页面有二维码和链接&#xff0…

P8710 [蓝桥杯 2020 省 AB1] 网络分析

题目链接&#xff1a;[蓝桥杯 2020 省 AB1] 网络分析 - 洛谷 解法一&#xff1a;并查集打暴力 不解释&#xff0c;肯定T 代码&#xff1a; #include<iostream> using namespace std;const int N 100005; int f[N]; int cnt[N]; int op,a,b; int n,m;int Find(int x)…

SpringAMQP从0到1

初识MQ 同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;但是你却…

5D9DVR动感平台常见故障码说明及故障处理

1.故障码及故障处理 通过键盘、本地Modbus 监控或远程以太网监控&#xff0c;可方便的对动感平台的运行故障进 行监控及诊断。出现故障请先查看控制卡Dn18~Dn1D 等状态参数确认是哪个轴报错&#xff0c;再进 行故障排除。常见故障码及说明如下。 LED 显示错误代码故障说明故障…

Linux 进程知识总结

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Linux操作…