在SQLite中BOOL值的类型是什么?我想在我的表中存储TRUE/FALSE值。

我可以创建一个INTEGER列,并在其中存储0或1的值,但这不是实现BOOL类型的最佳方式。

有办法吗?


当前回答

另一种方法是TEXT列。然后在从数据库保存/读取值之前/之后,在布尔值和String值之间转换布尔值。

例如,你有"boolValue = true;"

字符串:

//convert to the string "TRUE"
string StringValue = boolValue.ToString;  

回到boolean:

//convert the string back to boolean
bool Boolvalue = Convert.ToBoolean(StringValue);

其他回答

但是,如果你想存储一堆,你可以位移位它们,并将它们全部存储为一个整型,有点像unix文件权限/模式。

例如,对于模式755,每个数字指的是不同的用户类别:所有者、组、公众。在每个数字中,4是读的,2是写的,1是执行的,所以7就像二进制111一样。5是读取和执行的,所以是101。创建自己的编码方案。

我只是写一些东西存储电视时间表数据从时间表直接和我有二进制或是/否字段:立体声,hdtv,新,ei,关闭字幕,杜比,sap在西班牙语,赛季首演。所以是7位,或者一个最大值为127的整数。一个角色。

我现在正在做的一个C的例子。Has()是一个函数,如果第二个字符串在第一个字符串中,则返回1。Inp是这个函数的输入字符串。Misc是一个初始化为0的unsigned char。

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个布尔值,还有空间容纳更多布尔值。

另一种方法是TEXT列。然后在从数据库保存/读取值之前/之后,在布尔值和String值之间转换布尔值。

例如,你有"boolValue = true;"

字符串:

//convert to the string "TRUE"
string StringValue = boolValue.ToString;  

回到boolean:

//convert the string back to boolean
bool Boolvalue = Convert.ToBoolean(StringValue);

你可以用下面的方法来简化上面的方程:

boolean flag = sqlInt != 0;

如果布尔值的int表示(sqlInt)为0 (false),则布尔值(flag)为false,否则为true。

简洁的代码总是更好的工作:)

SQLite没有原生布尔数据类型。根据数据类型文档:

SQLite没有单独的布尔存储类。相反,布尔值存储为整数0 (false)和1 (true)。

埃里克瓦的回答更进一步。CHECK约束可以通过强制TEXT数据类型来启用伪布尔列,并且只允许特定于大小写的TRUE或FALSE值。

CREATE TABLE IF NOT EXISTS "boolean_test"
(
    "id" INTEGER PRIMARY KEY AUTOINCREMENT
,   "boolean" TEXT NOT NULL 
        CHECK( typeof("boolean") = "text" AND
               "boolean" IN ("TRUE","FALSE")
        )
);

INSERT INTO "boolean_test" ("boolean") VALUES ("TRUE");
INSERT INTO "boolean_test" ("boolean") VALUES ("FALSE");
INSERT INTO "boolean_test" ("boolean") VALUES ("TEST");

Error: CHECK constraint failed: boolean_test

INSERT INTO "boolean_test" ("boolean") VALUES ("true");

Error: CHECK constraint failed: boolean_test

INSERT INTO "boolean_test" ("boolean") VALUES ("false");

Error: CHECK constraint failed: boolean_test

INSERT INTO "boolean_test" ("boolean") VALUES (1);

Error: CHECK constraint failed: boolean_test

select * from boolean_test;

id  boolean
1   TRUE
2   FALSE