MySQL中ISNULL()仅支持单参数,用于判断是否为NULL并返回1或0;替换NULL应使用IFNULL()或COALESCE(),WHERE中检测NULL推荐用IS NULL而非ISNULL()。
MySQL 中没有这种双参数写法,用它会直接报错——这是最常见的误踩点。
ISNULL() 只能单参数,本质是布尔判断函数
它不是用来“替换 NULL”的,而是用来“判断是否为 NULL”并返回
或
的标量函数。语义等价于
,但返回的是数字而非布尔值(在 MySQL 中布尔即
)。
→ 返回
→ 返回
→ 返回
(空字符串不等于 NULL)
常用于统计:
想把 NULL 替换成默认值?别用 ISNULL,改用 IFNULL 或 COALESCE
真正做“空值兜底”的场景,
完全不合适。它不接受第二个参数,强行加就会触发上面那个错误。
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
:MySQL 原生、高效、仅限两个参数,推荐用于简单兜底
例如:
:SQL 标准函数,支持多参数,按序取第一个非 NULL 值
例如:
注意:
返回空字符串,但
仍返回
——它只认 NULL,不认空字符串
WHERE 条件里检测 NULL,优先用 IS NULL 而非 ISNULL()
虽然
语法合法,但可读性差、易和 SQL Server 混淆,且无法利用索引(和
一样,但后者是标准写法)。
✅ 推荐:
⚠️ 可用但不推荐:
❌ 错误:
(语法报错)
如果还要同时过滤空字符串,得显式写:
真正容易被忽略的是:NULL 和空字符串在 MySQL 中完全独立,
对空字符串返回
,对 NULL 才返回
;而业务上常把两者都当作“缺失值”处理——这时候必须手动合并判断,不能只靠一个函数搞定。
ISNULL(expr1, expr2)(1582, "Incorrect parameter count in the call to native function 'ISNULL'")10expr IS NULLTINYINT(1)ISNULL(NULL)1ISNULL(42)0ISNULL('')0ISNULL(name)SELECT SUM(ISNULL(phone)) AS missing_phone_count FROM users;ISNULL()IFNULL(expr1, expr2)SELECT IFNULL(price, 0) AS price FROM products;COALESCE(expr1, expr2, expr3, ...)SELECT COALESCE(nickname, real_name, '用户') AS display_name FROM users;IFNULL(NULL, '')IFNULL('', 'N/A')''WHERE ISNULL(col)col IS NULLSELECT * FROM orders WHERE status IS NULL;SELECT * FROM orders WHERE ISNULL(status);SELECT * FROM orders WHERE ISNULL(status, 'pending');WHERE status IS NULL OR status = ''ISNULL()01