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 NULL
,WHERE 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 NULL
或IS 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 字段