zoukankan      html  css  js  c++  java
  • 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里面的

  • 相关阅读:
    Linux内核链表——看这一篇文章就够了
    2的幂和按位与&——效率
    fgets注意事项
    GDB TUI
    GDB TUI
    linux shell命令行选项与参数用法详解
    What are the differences between Perl, Python, AWK and sed
    What is the difference between sed and awk
    /proc/sysrq-trigger
    C++ Sqlite3的基本使用
  • 原文地址:https://www.cnblogs.com/BadCodeBuilder/p/12775413.html
Copyright © 2011-2022 走看看