fengjie

MySQL 中 COALESCE() 和 IFNULL() 函数的区别

COALESCE() 和 IFNULL() 都是 MySQL 中用于处理 NULL 值的函数,但它们有一些重要区别:

参数数量

  • IFNULL(expr1, expr2) - 只接受2个参数
  • COALESCE(expr1, expr2, ..., exprN) - 可以接受多个参数

功能

  • IFNULL() - 如果第一个表达式为 NULL,则返回第二个表达式
  • COALESCE() - 返回参数列表中第一个非 NULL 的值

标准兼容性

  • COALESCE() 是 SQL 标准函数,大多数数据库都支持
  • IFNULL() 是 MySQL 特有的函数
-- IFNULL() 示例
SELECT IFNULL(NULL, 'default');  -- 返回 'default'
SELECT IFNULL('value', 'default');  -- 返回 'value'

-- COALESCE() 示例
SELECT COALESCE(NULL, NULL, 'default');  -- 返回 'default'
SELECT COALESCE(NULL, 'value1', 'value2');  -- 返回 'value1'
SELECT COALESCE('first', 'second');  -- 返回 'first'

何时使用哪个

  • 当只需要检查一个表达式是否为 NULL 并提供替代值时,两者都可以使用
  • 当需要检查多个表达式并返回第一个非 NULL 值时,必须使用 COALESCE()
  • 如果需要代码在不同数据库间可移植,优先使用 COALESCE()