我注意到MySQL中有些奇怪的东西,我想知道为什么它会以这种方式运行,并且有办法改变它?为什么MySQL在查找不相等时忽略空值?
方案
我账户有以下的列id, name, type
其中类型是InnoDB表一为空的。现在
,可以说我有10条记录,其中TYPE = “TEST” 和100条记录与他们type IS NULL
和20条记录,其中TYPE = “标准”
如果我运行此查询
SELECT * FROM accounts WHERE type <> "TEST"
此查询仅显示20条只有type =“STANDARD”的记录,并且忽略具有空值的100条记录。
要解决这一点,我会做这样的事情
SELECT * FROM accounts WHERE IFNULL(type,"") <> "TEST"
OR
SELECT * FROM accounts WHERE (type <> "TEST" OR type IS NULL)
NULL值是指空 “又名没有价值”,并没有值意味着<> “TEST”
这可能是一个预期的行为,但我不知道为什么它的设计如此
这是SQL标准。这就是'NULL'操作在语言中定义的方式。而'NULL'并不意味着“没有价值”;它意味着“未知”。 – 2014-11-04 18:03:27
'<=>'那是什么? - 是MySQL的具体情况,是否有与在NOT()中包装相反的其他方式? – Jake 2017-10-11 05:48:09