插件窝 干货文章 MySQL 中 IS TRUE 和 = TRUE 为什么会返回不同的结果?

MySQL 中 IS TRUE 和 = TRUE 为什么会返回不同的结果?

TRUE 返回 转换 NULL 802    来源:    2025-03-31

MySQL 中 IS TRUE 和 = TRUE 的区别分析

在 MySQL 中,IS TRUE= TRUE 确实会返回不同的结果,这是因为它们采用了不同的比较逻辑。

主要区别

  1. IS TRUE:

    • 严格的布尔值比较
    • 只有当值为 TRUE (1) 时才返回真
    • 对于 NULL 值会返回 NULL (使用 IS NOT UNKNOWN 可处理)
  2. = TRUE:

    • 会进行类型转换的比较
    • 任何非零数字都会被转换为 TRUE (1)
    • 字符串也会被尝试转换为数字进行比较

示例演示

SELECT 
    1 IS TRUE,      -- 返回 1 (TRUE)
    1 = TRUE,       -- 返回 1 (TRUE)

    2 IS TRUE,      -- 返回 0 (FALSE)
    2 = TRUE,       -- 返回 1 (TRUE) 因为2≠1但2被转换为TRUE(1)

    0 IS TRUE,      -- 返回 0 (FALSE)
    0 = TRUE,       -- 返回 0 (FALSE)

    NULL IS TRUE,   -- 返回 NULL
    NULL = TRUE,    -- 返回 NULL

    'abc' IS TRUE,  -- 返回 0 (FALSE)
    'abc' = TRUE,   -- 返回 0 (FALSE) 因为字符串转换为0

最佳实践建议

  1. 当需要严格的布尔比较时,使用 IS TRUE/IS FALSE
  2. 当需要包含类型转换的比较时,使用 = TRUE/= FALSE
  3. 处理 NULL 值时,考虑使用 IS NOT UNKNOWNIS NULL/IS NOT NULL

背后原理

这种差异源于 MySQL 的三值逻辑 (TRUE, FALSE, NULL) 和类型转换规则。IS 运算符是专门为布尔值和 NULL 检查设计的,而 = 会触发 MySQL 的类型转换规则。