NULL表示值未知或缺失,不能用=判断而需用IS NULL;IFNULL为MySQL专属双参数函数,COALESCE是标准多参数函数;清理假空值应先TRIM再NULLIF归一化。

MySQL 中的 NULL 不是“空字符串”也不是“0”,它代表**值未知或缺失**——数据库里真没这个数据,不是你忘了填,而是“不知道有没有”或“不适用”。
为什么不能用 = NULL 判断?
因为 NULL = NULL 返回的不是 TRUE,而是 UNKNOWN(SQL 三值逻辑),所以 WHERE column = NULL 永远查不到任何行。
- ✅ 正确写法:
WHERE column IS NULL或WHERE column IS NOT NULL - ⚠️ 错误写法:
WHERE column = NULL、WHERE column != NULL、WHERE column <> NULL - ? 小技巧:MySQL 支持空安全等于
<=>,column <=> NULL等价于column IS NULL,但注意这是 MySQL 特有语法,不跨数据库兼容
COALESCE() 和 IFNULL() 怎么选?
两者都用于把 NULL 替换成默认值,但行为和兼容性不同:
-
IFNULL(expr1, expr2):MySQL 专属,只接受两个参数;如果expr1是NULL,返回expr2,否则返回expr1 -
COALESCE(expr1, expr2, ..., exprN):SQL 标准函数,支持多参数,返回第一个非NULL的值;更通用,推荐在需要可移植性时使用 - ⚠️ 注意:
IFNULL(NULL, '')返回空字符串,但IFNULL(NULL, 0) + 10得到10;而NULL + 10直接是NULL—— 所有含NULL的算术运算结果都是NULL
SELECT id, name, IFNULL(telphone, '暂无电话') AS tel_safe, COALESCE(mobile, office_phone, '全部未提供') AS contact FROM tbUsers;
怎么安全地清理“假空值”(比如空格、空字符串)?
真实业务中,''(空字符串)和 NULL 常混在一起,但语义完全不同。用户可能提交了纯空格或 ' ',也可能根本没填(NULL)。这时候得组合清洗:
- 先用
TRIM()去首尾空格 - 再用
NULLIF(TRIM(str), '')把空字符串转成NULL(这是最干净的归一化方式) - 最后统一用
COALESCE()或IS NULL处理 - ❌ 避免直接
WHERE str = '' OR str IS NULL—— 它会漏掉' '这类带空格的数据
UPDATE tbUsers SET name = NULLIF(TRIM(name), '') WHERE name IS NOT NULL;
真正难的不是记住语法,而是每次写 WHERE 或做计算前,下意识问一句:“这个字段可能为 NULL 吗?如果为 NULL,当前逻辑会不会意外中断或返回错结果?”——很多线上 bug 都卡在这一步上。










