• sqlite 数据库 boolean类型的小小测试



    根据官方文档的介绍:

    SQLite does not have a separate Boolean storage class. Instead, Boolean values are stored as integers 0 (false) and 1 (true).

    sqlite数据库中没有单独的Boolean存储类,Booean值以0(false)和1(true)来存储.


     经我短时间测试的实践, 显示boolean 有三种状态, 0(false)  1(true)  和 null,如下图所示,


    经过下列插入语句,测试,均可插入成功.而且, 可以通过

    select * from stu where flag  ="数据库" 

    查询到name 为a9 的行.

    insert into stu (name,flag) values ('a1','true'); -- 0
    insert into stu (name,flag) values ('a2','ture'); -- 0
    insert into stu (name,flag) values ('a3',1);  -- 1
    insert into stu (name,flag) values ('a4','null'); --0 
    insert into stu (name,flag) values ('a5','1');   --1 
    insert into stu (name,flag) values ('a6',null); -- null
    insert into stu (name,flag) values ('a7','2'); --1
    insert into stu (name,flag) values ('a8',15); --1
    insert into stu (name,flag) values ('a9',"数据库"); --0

    导出数据库,可以发现,执行的sql语句是这样的, 

    insert into [stu] values('a1', 0);
    insert into [stu] values('a2', 0);
    insert into [stu] values('a3', 1);
    insert into [stu] values('a4', 0);
    insert into [stu] values('a5', 1);
    insert into [stu] values('a6', null);
    insert into [stu] values('a7', 1);
    insert into [stu] values('a8', 1);
    insert into [stu] values('string', 0);
    insert into [stu] values('string2', 0);
    insert into stu (name,flag) values ('a9',0); --0

    如此, 猜想, sqlite 是采用了 字符型存储插入的boolean类型数据, 但是,取出的时候, 会将插入的字符型数据转换成int类型来使用.

    因此,可以得到下面的结论:

    1. -- 字符可转换为int类型的为且不为0的为 true, 转换失败或转换后为0的为 false(0) 
    2. -- int ,long double 等数字,0为false, 其他>=1的为 true(1) 
    3. -- 布尔类型报错, null为 null,默认值

    ps: 尚未对其进行深入了解,目前是实践测试的结论,纯属猜测,如果有知情者,可告知.


    ---------2014年4月12日 更新-------

     参考T-SQL 中对位数据类型的定义:

    “使用位列(bit column)来获得真(true)和假(false)数据类型,或是(yes)和否(no)的数据类型。位列保存 0 或 1。位列接受 0 或 1 之外的整数值,但总是将它解释为 1。位(bit)数据类型的列不能为 NULL,且不能对其进行索引。”

    想了解更多,可以参考我转载的这篇文章: 利用 UDF 轻松迁移


  • 相关阅读:
    jQuery标准的AJAX模板
    maven库
    在 Windows7 上按照 MySQL5.7
    如何保证代码的有效性
    项目负责人的职责
    string integer == equals 转
    走近AbstractQueuedSynchronizer
    STAR
    tesseract-ocr
    Spring @Qualifier l转
  • 原文地址:https://www.cnblogs.com/aikongmeng/p/3697305.html
Copyright © 2020-2023  润新知