# MySQL查询不到非NULL的数据

作者:Odboy (opens new window)

本站地址:https://blog.odboy.cn (opens new window)

# 背景

迁云行动,MySQL由5.0迁移8.0,由MySQL语法更加的严谨,导致2023年有效的SQL变为无效的。

# 例子

字段 status 可空,status 字段为 NULL 的数据,在MySQL8中没有返回

SELECT * FROM xxxx_log WHERE `status` != 'complate';
1

# 查询资料

查询条件示例 能否查出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值,整个查询会返回空结果集。

# 解决方案

字段设置为非空

最近更新: 2025-09-23
MySQL查询不到非NULL的数据

2017 - 武林秘籍   |