根据官方文档的介绍:
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
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类型来使用.
因此,可以得到下面的结论:
- -- 字符可转换为int类型的为且不为0的为true,转换失败或转换后为0的为 false(0)
- --int,long double 等数字,0为false,其他>=1的为 true(1)
- --布尔类型报错,null为 null,默认值
ps: 尚未对其进行深入了解,目前是实践测试的结论,纯属猜测,如果有知情者,可告知.
---------2014年4月12日 更新-------
参考T-sql 中对位数据类型的定义:
“使用位列(bit column)来获得真(true)和假(false)数据类型,或是(yes)和否(no)的数据类型。位列保存 0 或 1。位列接受 0 或 1 之外的整数值,但总是将它解释为 1。位(bit)数据类型的列不能为 NULL,且不能对其进行索引。”
想了解更多,可以参考我转载的这篇文章:利用 UDF 轻松迁移
原文链接:https://www.f2er.com/sqlite/200638.html