微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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,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 轻松迁移

原文地址:https://www.jb51.cc/sqlite/200638.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐