关闭

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

发表于:2014-4-16 10:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:aikongmeng    来源:51Testing软件测试网采编

  根据官方文档的介绍:
  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类型来使用.
  因此,可以得到下面的结论:
  -- 字符可转换为int类型的为且不为0的为 true, 转换失败或转换后为0的为 false(0)
  -- int ,long double 等数字,0为false, 其他>=1的为 true(1)
  -- 布尔类型报错, null为 null,默认值
  ps:尚未对其进行深入了解,目前是实践测试的结论,纯属猜测,如果有知情者,可告知.
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号