在 MySQL 中,IS TRUE
和 = TRUE
确实会返回不同的结果,这是因为它们采用了不同的比较逻辑。
IS TRUE
:
TRUE
(1) 时才返回真NULL
值会返回 NULL
(使用 IS NOT UNKNOWN
可处理)= 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
IS TRUE
/IS FALSE
= TRUE
/= FALSE
NULL
值时,考虑使用 IS NOT UNKNOWN
或 IS NULL
/IS NOT NULL
这种差异源于 MySQL 的三值逻辑 (TRUE, FALSE, NULL) 和类型转换规则。IS
运算符是专门为布尔值和 NULL
检查设计的,而 =
会触发 MySQL 的类型转换规则。