# MySQL查询不到非NULL的数据
# 背景
迁云行动,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 值,整个查询会返回空结果集。 |
# 解决方案
字段设置为非空