晚上写数据库的作业,遇到一道题,要求写出查询语句并写出结果,人脑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