mysql 中 is true 和 =true 結(jié)果不一致的原因
在 mysql 中查詢數(shù)據(jù)時(shí),使用 is true 和 =true 作為條件會(huì)導(dǎo)致不同的結(jié)果。這是因?yàn)檫@兩個(gè)操作具有不同的語(yǔ)義:
- = 執(zhí)行的是數(shù)值比較。true 在 mysql 中表示為 1,但 is_deleted 列是一個(gè) tinyint(1) 類型,它的取值范圍為 0-255。因此,=true 實(shí)際上是將 is_deleted 與 1 進(jìn)行比較。
- is true 執(zhí)行的是真假判斷。在 mysql 中,非零值都表示 true,而 0 表示 false。因此,is true 將 is_deleted 為非零(即不等于 0)的記錄視為 true。
示例
已知表結(jié)構(gòu)如下:
create table user ( id int not null auto_increment, is_deleted tinyint(1) not null default 0, primary key (id) );
登錄后復(fù)制
插入的示例數(shù)據(jù):
insert into user (is_deleted) values (127); insert into user (is_deleted) values (0);
登錄后復(fù)制
查詢結(jié)果
執(zhí)行以下查詢語(yǔ)句:
select * from `user` where is_deleted is true;
登錄后復(fù)制
結(jié)果:
+----+------------+ | id | is_deleted | +----+------------+ | 1 | 127 | +----+------------+
登錄后復(fù)制
執(zhí)行以下查詢語(yǔ)句:
select * from `user` where is_deleted = true;
登錄后復(fù)制
結(jié)果:
空集
登錄后復(fù)制
可見,使用 is true 查詢到了 is_deleted 為 127(非 0)的記錄,而使用 =true 未查詢到任何記錄。