MySQL datetime NULL 问题,'=' 和 '!=' 返回 0 行

Posted

技术标签:

【中文标题】MySQL datetime NULL 问题,\'=\' 和 \'!=\' 返回 0 行【英文标题】:MySQL datetime NULL issue, '=' and '!=' return 0 rowsMySQL datetime NULL 问题,'=' 和 '!=' 返回 0 行 【发布时间】:2014-03-25 02:16:24 【问题描述】:

我有一张表linksbase,里面填满了值。 lastvisited 是日期时间,并且到处都是 NULL(允许使用空值)。我在 phpmyadmin 中运行查询(通过 Java 相同),结果为空:

SELECT `id` FROM `linksbase` WHERE `lastvisited` = NULL

而且,如果我跑了

SELECT `id` FROM `linksbase` WHERE `lastvisited` != NULL 

我也得到空结果。 如果我运行

选择 * 从linksbase WHERE 1

我得到一个应该是的行列表(所以,它正在工作)。

查询出了什么问题,为什么两个相互排斥的查询返回 0 行。

【问题讨论】:

你试过IS,比如WHERE lastvisited IS NULLWHERE lastvisited IS NOT NULL NULL 既不等于也不等于任何东西。甚至不是NULL! 【参考方案1】:

你应该使用

SELECT `id` FROM `linksbase` WHERE `lastvisited` IS NULL

SELECT `id` FROM `linksbase` WHERE `lastvisited` IS NOT NULL

【讨论】:

@Tigran 3.3.4.6 Working with NULL Values 因为任何算术比较与NULL的结果也是NULL,你不能从这样的比较中得到任何有意义的结果。 @GrijeshChauhan 他们允许检查我的答案【参考方案2】:

您应该使用IS NULLIS NOT NULL 而不是将NULL 与!!= 运算符进行比较。那些永远都是假的。

【讨论】:

【参考方案3】:

如果你有空列而不是 null ,那么考虑使用这个

 SELECT `id` FROM `linksbase` WHERE  `lastvisited` = ''  OR `lastvisited` IS NULL

这将查找空列和带有 null 的列。

【讨论】:

以上是关于MySQL datetime NULL 问题,'=' 和 '!=' 返回 0 行的主要内容,如果未能解决你的问题,请参考以下文章

Mysql5.1中,datetime类型的字段为啥插入不了NULL值

MySQL datetime列WHERE col IS NULL失败

mysql中,datetime与timestamp数据类型有啥区别

DataTable 不接受 MySQL 表中的 DateTime 字段

如何在 MySQL 中选择 DateTime.MinValue (01/01/1970)?

SQL datetime字段的值怎么才能修改为<NULL> 值