MySQL查询不到非NULL的数据
背景
迁云行动,MySQL由5.0迁移8.0,由MySQL语法更加的严谨,导致2023年有效的SQL变为无效的。
例子
字段
status可空,status字段为NULL的数据,在MySQL8中没有返回
sql
SELECT *
FROM xxxx_log
WHERE `status` != 'complate';查询资料
| 查询条件示例 | 能否查出NULL值? | 说明 |
|---|---|---|
WHERE column_name != 'xxx' | ❌ 不能 | 这是你遇到的问题。因为NULL != 'xxx'的结果是NULL(未知),而非TRUE,所以行被过滤。 |
WHERE column_name = 'xxx' | ❌ 不能 | 同理,NULL = 'xxx'的结果也是NULL。 |
WHERE column_name IS NULL | ✅ 能 | 正确方法。专门用于判断NULL值。 |
WHERE column_name IS NOT NULL | ✅ 能 | 正确方法。专门用于判断非NULL值。 |
WHERE column_name IN ('value1', 'value2') | ❌ 不能 | 本质是多个=运算的集合,同样无法匹配NULL。 |
WHERE column_name NOT IN ('value1', 'value2') | ❌ 不能 | 如果集合中包含NULL值,整个查询会返回空结果集。 |
解决方案
字段设置为非空

