在 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/= FALSENULL 值时,考虑使用 IS NOT UNKNOWN 或 IS NULL/IS NOT NULL这种差异源于 MySQL 的三值逻辑 (TRUE, FALSE, NULL) 和类型转换规则。IS 运算符是专门为布尔值和 NULL 检查设计的,而 = 会触发 MySQL 的类型转换规则。