在数据库中找不到null值

时间:2013-09-13 13:05:21

标签: mysql null innodb

我有一个InnoDB表,其中包含名为' status'的列。这可以用“成功”来填补。当代码运行异常时,或者' special'或者为NULL。

我有一个cronjob查看此表并尝试重新处理状态不是' succes'或者'特殊'。但是我注意到它没有用。

所以我用以下查询查询了表:

SELECT * FROM master_innodb.some_table WHERE status!=' succes'和status!='特殊';

返回0行。

当我更改了我期望它从状态NULL返回到空字段的行时,查询返回了此行。

有人可以解释一下吗?

此致

Matthijs

1 个答案:

答案 0 :(得分:1)

所以我认为你可以更多地了解一个NULL值在MySQL数据库中代表什么。在最好的时候,NULL可能是一个混乱的野兽。来自MySQL docs

  

在您习惯之前,NULL值可能会令人惊讶。   从概念上讲,NULL表示“缺少未知值”并对其进行处理   与其他价值观略有不同。

所以NULL几乎意味着'缺少数据'。因此,当您指定谓词:

status != 'success' AND status != 'special'

然后不返回status列中包含NULL的行,因为我们不知道具有NULL status的行是否等于'succes'或等于'special' 。因此它不会被退回。

您可以尝试使用此行来获取CRON作业中的重新处理行:

SELECT * FROM master_innodb.some_table WHERE status is null;