IFNULL 是 MySQL 中用于将 NULL 值替换为指定值的函数,语法为 IFNULL(expr1, expr2),当 expr1 为 NULL 时返回 expr2,否则返回 expr1;它不处理空字符串或 0,常用于报表统计、用户信息展示等场景。

IFNULL 函数是 MySQL 中处理空值(NULL)最直接的 工具,它能用指定值替换 NULL,避免查询结果出现意外的空数据。
IFNULL 函数的基本用法
语法很简单:IFNULL(expr1, expr2)。它的逻辑是:如果 expr1 不是 NULL,就返回expr1;如果是 NULL,就返回expr2。
- expr1 可以是字段名、表达式或常量
- expr2 必须与 expr1 兼容的数据类型(比如都是数字或都是字符串)
- 该函数只判断第一个参数是否为 NULL,不处理空字符串(”)或 0
常见应用场景举例
实际开发中,这些地方经常需要 IFNULL:
- 报表统计时,把 NULL 销量替换成 0,避免 SUM 或图表显示异常
- 用户信息展示,当手机号为空时显示“暂未填写”
- 价格计算中,折扣字段为 NULL 时按 0 处理,防止总价出错
- 联表查询后,右表字段可能为 NULL,用 IFNULL 统一兜底
注意和 NULL 相关的几个细节
MySQL 中 NULL 有特殊性,容易踩坑:
- 不能用 = NULL 或 != NULL 判断,必须用 IS NULL 或 IS NOT NULL
- 任何值与 NULL 做运算(如 5 + NULL)结果仍是 NULL
- IFNULL 只替换 NULL,对空字符串(”)、0、’0’ 等非 NULL 值无效
- 如果想同时处理 NULL 和空字符串,可用嵌套:IFNULL(NULLIF(trim(col), ”), ‘ 默认值 ’)
替代方案对比
除了 IFNULL,还有两个常用函数可实现类似效果:
- COALESCE(expr1, expr2, …, exprN):返回第一个非 NULL 的表达式,支持多个参数,更通用
- CASE WHEN … THEN … ELSE … END:逻辑更灵活,适合复杂条件判断,但写法稍长
- IFNULL 效率略高,因为只接受两个参数,内部优化更直接