mysql 中 IS TRUE 和 =True 結(jié)果差異的原因
當(dāng)比較 MySQL 中的布爾值時(shí),可以發(fā)現(xiàn) IS TRUE 和 =True 返回的結(jié)果不同。為什么會(huì)出現(xiàn)這種情況呢?
對(duì)于 IS TRUE 比較,它將非零值解釋為真,而對(duì)于 =True 比較,它檢查值是否嚴(yán)格等于 1。在 MySQL 中,TRUE 被轉(zhuǎn)換為TINYINT(1)類型,其中 1 表示真,0 表示假。
所以,當(dāng)使用 =True 時(shí),它正在檢查 TINYINT(1) 值是否等于 1。然而,當(dāng)使用 IS TRUE 時(shí),它正在檢查該值是否非零。
在此示例中,TINYINT(1) 列 is_deleted 中的值為 127,而非 1。因此,=True 比較失敗,而 IS TRUE 比較成功。
差異的意義
理解這一差異非常重要,因?yàn)樗梢杂绊?SQL 查詢的結(jié)果。當(dāng)需要檢查值是否為真時(shí)(類似于 Java 中的 Boolean 值),請(qǐng)使用 IS TRUE。當(dāng)需要檢查值是否等于特定的布爾值時(shí)(例如 TRUE 或 FALSE),則使用 =True 或 =FALSE。