【 TiDB 使用环境】生产环境 /测试/ Poc
我这有个简单查询的sql
select id,channel from t_bike_unbind_part where vin = ‘LR4DE1SB6N2033237’
查询出来channel 有null正常显示
select id,channel from t_bike_unbind_part where vin = ‘LR4DE1SB6N2033237’ and channel <> ‘1’
加了一个过滤条件不等于1,结果是null的值都被过滤掉了,这个是为什么?
因为 NULL和其他字符串比较返回的都是NULL
我们这边规范是要求对于可能为null的字段都要加IFNULL
IFNULL(channel,'') <> '1'
2 个赞
根据三值逻辑中的Null真理值定理,Null值既不等于真也不等于假,因此它不等于任何非Null值(包括1),null不能等于或者不等于,基本上数据库都是这个处理逻辑
1 个赞
mysql也是这样的,又学到了。
oracle里面空字符串和null是一样的,mysql里面不一样
这个跟空串没关系啊,说的是null
最好字段非空有默认值
理想很美好,现实很骨感。。。每个人的习惯不一样,今天加个字段明天加个字段,慢慢就控制不住了。
空值不参与任何比较
此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。