是什么导致 Date 在专门选择 NOT NULL 字段时为 <null>?

What causes a Date to be <null> while specifically selecting the NOT NULL fields?

在我的一个 MYSQL 数据库中,我做了以下查询:

SELECT * FROM mytable WHERE date_column < 1971-01-01 AND date_column IS NOT NULL;

这 returns 大约 3000 个项目,其中日期在 mysql 命令行提示符和 IntelliJ IDEA mysql 数据库编辑器中显示为 NULL。

该列的类型为 DATE。

该数据库是已经 运行 几年的产品数据库环境的副本。

记录怎么会变成那种状态?那是什么状态?我怎样才能正确修复它?

PS:< 1971/01/01 子句只是为了从查询中过滤出正确的日期。如果我只是查询 IS NOT NULL 子句,我当然仍然会得到这些奇怪的日期。

我很惊讶这能奏效。首先,日期常量应该用单引号括起来:

SELECT *
FROM mytable
WHERE date_column < '1971-01-01' AND date_column IS NOT NULL;

其次,这不能 return date_column 的 NULL 值。这表明两件事之一:

  • date_col 实际上是另一种类型,例如 varchar,您看到的是 'NULL' 字符串,而不是 NULL 值。
  • 另一列是NULL