【LightDB】=null mysql兼容

null值

在sql标准中,NULL用户表示未知数据(类似如常生活中表格内容未填写)。根据null的语义可知,所有值和NULL比较时,都为false。

select '' = null; --false
select 'a' = null; -- false
select null = null; -- false 

注意:null=null的返回值时false(未知的东西没法比较)

is null

如何判断字段的值是否为null呢?IS NULL时专门用来判断字段内容是否为null的。

select '' is null ; -- false
select 'a' is null; -- false
select null is null; -- true

通过is null可以判断一个字段是否为null。

transform_null_equals

transform_null_equals开关,可以将=null表达转换为is null表达式。下面举个例子:

set transform_null_equals = on; -- 开启后
select '' = null ;   -- '' = null 转化成 '' is null
select 'a' = null;  -- 'a' = null 转换为'a' is null
select null = null; --  null = null转换为null is null

transform_null_equals默认开启,会导致mysql用户迁移后,=null的行为和mysql不一致。为解决这个问题,23.4在mysql模式下永远不生效,且保持和sql标准兼容(=null的结果永远为false)。效果如下:

lightdb@mysql=# set transform_null_equals = on; 
SET
lightdb@mysql=# select * from dual where null = null;
 dummy 
-------
(0 rows)

lightdb@mysql=# set transform_null_equals = off;
SET
lightdb@mysql=# select * from dual where null = null;
 dummy 
-------
(0 rows)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值