为什么 select IF(null <> 1,"true","false") 返回 false? null 不是 1?

时间:2021-01-27 16:44:48

标签: mysql

为什么 select IF(null <> 1,"true","false") 返回 false? null 不是 1?!

1 个答案:

答案 0 :(得分:3)

NULL 不能用 =<> 测试。根据定义,此类测试总是失败。

相反,要测试列 col 是否为空,请酌情使用以下方法之一:

col IS NULL
col IS NOT NULL

还有<=>,但详细阅读手册。更改为此可能是“正确的”(但我不确定):

IF(null <=> 1, "false", "true")

如果“null”来自应用代码,请考虑其中一种(或许多其他可能性)将 NULL 转换为可以比较的内容:

IFNULL(?, 0)
COALESCE(?, 0)

要考虑的另一件事

IF(<<some test>>, true, false)

可以简单地替换为测试。

但如果您确实需要字符串 "true""false",那么此提示不适用。

这些理解 NULL:<=>、IFNULL()、COALESE()、IS NULL、IS NOT NULL、COUNT(col)(当 col 为 NULL 时不计算行)、LEFT JOIN(通过生成 NULL)、等

这些不理解NULL,只返回NULL:+、-、*、/、<、>等