為什么 mysql 的 where 語(yǔ)句在 bool 值之間使用 = 時(shí)無(wú)法進(jìn)行檢索?
問(wèn)題:
表結(jié)構(gòu)包含一個(gè)枚舉列 is_svddb_match,它可以是 ‘true’ 或 ‘false’。但是,當(dāng)使用 where is_svddb_match = false 查詢時(shí),結(jié)果集中沒(méi)有顯示任何記錄,即使存在 is_svddb_match 為 ‘false’ 的值。
答案:
mysql 中枚舉類型的索引是從 1 開(kāi)始的,而不是從 0 開(kāi)始的。在給定的表中,’true’ 枚舉值為 1,而 ‘false’ 枚舉值為 2。因此:
- where is_svddb_match = false 等于 where is_svddb_match = 0,這是無(wú)效的,因?yàn)樗饕袥](méi)有為 ‘false’ 分配的值 0。
- where is_svddb_match = true 等于 where is_svddb_match = 1,這是有效的,因?yàn)?‘true’ 枚舉值為 1。
避免混淆:
為了避免混淆,避免將枚舉值直接與整數(shù)進(jìn)行比較。取而代之的是,使用字符串比較:
WHERE is_svddb_match = 'false'
這將正確檢索 is_svddb_match 列值為 ‘false’ 的記錄。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載。
THE END