SQLite中BOOL值的类型是什么?我想在我的表中存储TRUE/FALSE值.
我可以创建一个INTEGER列并在其中存储值0或1,但它不是实现BOOL类型的最佳方法.
有办法吗?
谢谢.
SQLite没有本机布尔数据类型.根据数据类型文档:
SQLite没有单独的布尔存储类.相反,布尔值存储为整数0(假)和1(真).
SQLite 布尔数据类型:
SQLite没有单独的布尔存储类.相反,布尔值存储为整数0(假)和1(真).
您可以通过以下方式将boolean转换为int:
int flag = (boolValue)? 1 : 0;
您可以将int转换回boolean,如下所示:
// Select COLUMN_NAME values from db. // This will be integer value, you can convert this int value back to Boolean as follows Boolean flag2 = (intValue == 1)? true : false;
如果你想探索sqlite,这是一个教程.
我在这里给出了一个答案.这对他们有用.
在SQLite中,您可以做的最好是使用整数0和1来表示false和true.您可以像这样声明列类型:
CREATE TABLE foo(mycolumn BOOLEAN NOT NULL CHECK (mycolumn IN (0,1)));
除了0和1之外,省略NOT NULL
if NULL
.
这里使用类型名称BOOLEAN
是为了便于阅读,而SQLite只是一种具有NUMERIC亲和力的类型.
请注意,自SQLite 3.3.0(2006)以来,支持CHECK约束.
以下是一些可行的示例INSERT :(注意如何将字符串和浮点数解析为整数)
sqlite> INSERT INTO foo VALUES(0); sqlite> INSERT INTO foo VALUES(1); sqlite> INSERT INTO foo VALUES(0.0); sqlite> INSERT INTO foo VALUES(1.0); sqlite> INSERT INTO foo VALUES("0.0"); sqlite> INSERT INTO foo VALUES("1.0"); sqlite> select mycolumn, typeof(mycolumn) from foo; 0|integer 1|integer 0|integer 1|integer 0|integer 1|integer
还有一些会失败:
sqlite> INSERT INTO foo VALUES("-1"); Error: constraint failed sqlite> INSERT INTO foo VALUES(0.24); Error: constraint failed sqlite> INSERT INTO foo VALUES(100); Error: constraint failed sqlite> INSERT INTO foo VALUES(NULL); Error: foo.mycolumn may not be NULL sqlite> INSERT INTO foo VALUES("true"); Error: constraint failed sqlite> INSERT INTO foo VALUES("false"); Error: constraint failed
使用值为0和1的Integer数据类型是最快的.
但是,如果要存储一堆,可以对它们进行位移位并将它们全部存储为一个int,有点像unix文件的权限/模式。
例如,对于模式755,每个数字表示不同类别的用户:所有者,组,公共。在每个数字中读取4个数据,写入2个数据,执行1个数据,以便7都像二进制111一样。读取和执行5个数据,所以101。构成您自己的编码方案。
我正在写一些东西来存储Schedules Direct中的电视时间表数据,并且我具有二进制或是/否字段:立体声,hdtv,new,ei,隐藏字幕,杜比,汁液在西班牙语中,本季首播。所以是7位,即最大为127的整数。实际上是一个字符。
我现在正在研究的交流示例。has()是一个函数,如果第二个字符串在第一个字符串中,则返回1。inp是此函数的输入字符串。misc是一个初始化为0的无符号字符。
if (has(inp,"sap='Spanish'") > 0) misc += 1; if (has(inp,"stereo='true'") > 0) misc +=2; if (has(inp,"ei='true'") > 0) misc +=4; if (has(inp,"closeCaptioned='true'") > 0) misc += 8; if (has(inp,"dolby=") > 0) misc += 16; if (has(inp,"new='true'") > 0) misc += 32; if (has(inp,"premier_finale='") > 0) misc += 64; if (has(inp,"hdtv='true'") > 0) misc += 128;
因此,我将7个布尔值存储在一个整数中,并且还有更多空间。