Skip to content

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值,整个查询会返回空结果集。

解决方案

字段设置为非空