MySQL 中 NULL 表示未知或不存在,须用 IS NULL/IS NOT NULL 判断;= 或 != 与 NULL 比较恒为 UNKNOWN;可用 COALESCE/IFNULL 转换默认值;聚合函数自动忽略 NULL,索引中 NULL 单独存储。
在 MySQL 中,空值(NULL)不是空字符串('')也不是数字 0,而是一个特殊的标记,表示“未知”或“不存在”。直接用 = 或 != 判断 NULL 会返回 FALSE 或 UNKNOWN,因此必须使用专门的 NULL 判断语法。
这是最标准、最安全的方

column_name IS NULL:匹配该字段值为 NULL 的记录column_name IS NOT NULL:匹配该字段值非 NULL 的记录例如查询没有填写电话号码的用户:
SELECT * FROM users WHERE phone IS NULL;以下写法**永远不生效**,因为 NULL 参与任何普通比较运算都会返回 UNKNOWN(在 WHERE 中等价于 FALSE):
WHERE phone = NULL → 不会查出任何 NULL 记录WHERE phone != NULL 或 WHERE phone NULL → 同样无效MySQL 会警告你:“Incorrect usage of NULL value”,但不会报错,容易埋下逻辑漏洞。
当需要把 NULL 转成默认值(比如显示为 '暂无' 或参与数值计算),可用:
COALESCE(col, '默认值'):返回第一个非 NULL 的表达式,支持多个参数IFNULL(col, '默认值'):仅接受两个参数,更简洁示例:把 NULL 的 age 显示为 0,用于统计平均年龄:
SELECT AVG(IFNULL(age, 0)) FROM users;大多数聚合函数(如 COUNT、SUM、AVG)会自动忽略 NULL 值:
COUNT(*) 统计所有行;COUNT(col) 只统计 col 非 NULL 的行建表时若业务上该字段不应为空,建议显式声明 NOT NULL 并设默认值,从源头减少 NULL 处理负担。