SQLite中BOOLEAN在where中的奇怪现象

晚上写数据库的作业,遇到一道题,要求写出查询语句并写出结果,人脑DBMS?这么繁重的体力活肯定不干,果断把作业(docx版)的数据拿出来转csv导入到SQLite里面,反正是写SQL语句,管它那个SQL呢,然后就遇到了一个奇怪的bug

DDL如下

CREATE TABLE Printer (
    model VARCHAR (4) PRIMARY KEY,
    color BOOLEAN,
    type  VARCHAR (7),
    price INTEGER
);

数据如下

model,color,type,price
3001,true,ink-jet ,99
3002,false,laser ,239
3003,false,laser ,899
3004,true, ink-jet ,120
3005,false, laser ,120
3006,true,ink-jet ,100
3007,true,laser ,200

其中有一问就是要求选出是彩色打印机的所有属性,即color==true的,还不简单

select * from Printer where color = true;

放到shell里面一跑,嗯?啥都没有?以为shell坏了,再放到sqlitestudio里面跑一下,还是空,思前想后百思不得其解,准备来写这个bug的时候,灵稽一动,我手动插一个数据试试

insert into Printer values(3008, true, "laser", 500);

然后再按上上条语句来查询,出现一条结果!找到了,导入的数据不是BOOLEAN,盲猜是字符串,于是做了如下尝试

select * from Printer where color = "true";

该出来的都出来了,而且刚刚手动插入的那条没有出现,罪魁祸首找到了

SQLiteStudio数据导入是将false/true作为字符串导入到BOOLEAN里面的

原文地址:https://www.cnblogs.com/BadCodeBuilder/p/12775413.html