mysql中判断空值需区分 NULL 和空 字符串:用 IS NULL/IS NOT NULL 判断 NULL;用 =”/!=” 判断空字符串;统一处理二者用 IS NULL OR =” 或 COALESCE(TRIM(col),”)!=”;替换用 IFNULL 或 COALESCE。

判断 MySQL 中的空值,关键要分清 NULL 和 空字符串(”) —— 它们语义不同,写法和处理方式也完全不同。
用 IS NULL / IS NOT NULL 判断 NULL 值
这是唯一正确判断字段是否为 数据库 意义上的“空”(即 NULL) 的方式。
- 查 NULL:
WHERE phone IS NULL—— 返回 phone 字段真正为 NULL 的记录 - 查非 NULL:
WHERE email IS NOT NULL—— 排除所有 email 是 NULL 的行 - 不能写
= NULL或!= NULL,因为 NULL 参与任何等值比较都返回 UNKNOWN,结果恒为 false,查不到数据
用 = ” / != ” 判断空字符串
空字符串('')是真实存在的、长度为 0 的字符串,不是 NULL。它需要单独判断。
- 查空字符串:
WHERE name = '' - 查非空字符串(且非 NULL):
WHERE name != '' AND name IS NOT NULL—— 缺一不可,否则会漏掉 NULL 或 ” 的情况 - 常见误区:只写
name != '',会把 NULL 值也包含进来(因为 NULL != ” 仍为 UNKNOWN,不满足条件),但逻辑上你可能并不想让 NULL 被当作“非空”
同时判断 NULL 和空字符串
业务中常需把两者都视作“无效值”,统一过滤或替换。
- 查 NULL 或 ”:
WHERE col IS NULL OR col = '' - 查既不 NULL 也不 ”:
WHERE col IS NOT NULL AND col != '' - 更简洁写法(MySQL 特有):
WHERE COALESCE(TRIM(col), '') !='',可同时剔除 NULL、纯空格、空字符串
用 IFNULL 或 COALESCE 做空值替换
查询时不想看到 NULL,可用函数兜底,提升可读性或兼容性。
-
select IFNULL(phone, '未填写') FROM users;—— phone 是 NULL 就显示“未填写” -
SELECT COALESCE(phone, mobile, '暂无联系方式') FROM users;—— 从左到右取第一个非 NULL 值 - 注意:
IFNULL只接受两个参数;COALESCE支持多个,更灵活