Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite中是否有布尔文字?_Sqlite_Boolean_Literals - Fatal编程技术网

SQLite中是否有布尔文字?

SQLite中是否有布尔文字?,sqlite,boolean,literals,Sqlite,Boolean,Literals,我知道boolean列类型,但是SQLite中是否有booleanliteral?在其他语言中,这可能是true或false。显然,我可以使用0和1,但我倾向于尽可能避免使用所谓的“幻数” 从中可以看出,它可能存在于其他SQL实现中,但不存在于SQLite中。(我正在使用SQLite 3.6.10,不管它值多少钱。) 1.1布尔数据类型 SQLite没有单独的布尔存储类。相反,布尔值存储为整数0(false)和1(true) 来自文档部分: SQLite没有单独的布尔存储类。相反,布尔值存储为整

我知道
boolean
列类型,但是SQLite中是否有
boolean
literal?在其他语言中,这可能是
true
false
。显然,我可以使用
0
1
,但我倾向于尽可能避免使用所谓的“幻数”

从中可以看出,它可能存在于其他SQL实现中,但不存在于SQLite中。(我正在使用SQLite 3.6.10,不管它值多少钱。)

1.1布尔数据类型

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

来自文档部分:

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


因此,您似乎被
0
1

卡住了,因为没有布尔数据类型。仅列出了5种类型。整数可以以不同的宽度存储在磁盘上,最小宽度为1字节。但是,这是一个实施细节:

“但是一旦整数值 读取磁盘并将其存储到内存中 处理时,它们将转换为 最通用的数据类型(8字节有符号 整数)。”


考虑到这一点,没有布尔文本也就不足为奇了。

SQLite3中只支持5种数据类型

来自官方SQLite3文档。 “存储在SQLite数据库(或由数据库引擎操作)中的每个值都有以下存储类之一:

NULL. The value is a NULL value.

INTEGER. The value is a signed integer, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value."
如果您要存储1和0,那么SQLite将在存储时使用1字节。这还不错。 官方文档链接:-

布尔->数字(关联)

列关联性

SQLite支持列的类型关联概念。任何列仍然可以存储任何类型的数据,但列的首选存储类称为其关联。SQLite3数据库中的每个表列都分配了以下类型关联之一: 亲缘关系描述

  • TEXT此列使用存储类NULL、TEXT或NULL存储所有数据 斑点
  • 数值此列可能包含使用所有五种存储的值 上课
  • 整数的行为与具有数值关联的列相同 在强制转换表达式中出现异常
  • 实数的行为类似于具有数值相关性的列,只是它强制将整数值转换为浮点表示
  • 无具有亲缘关系的列无不喜欢一个存储类而不喜欢另一个存储类,并且未尝试 将数据从一个存储类强制转换到另一个存储类
布尔数据类型:

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

@梅因鸭
另一方面,尽管SQLite不是这五种类型中的一种,但它支持日期时间,所以这个答案是不确定的


SQLite没有专门用于存储日期和/或时间的存储类。相反,SQLite的内置日期和时间函数能够将日期和时间存储为文本、实数、整型值:

我注意到在SQLite for android中,我可以声明一个布尔列类型,没有错误r和它似乎工作得很好。我还尝试将列定义为“int”并存储java布尔值。我下载了db并确认我在列中写的是“true”。我认为它很有效。

问题显然不是列类型(即存储方面),而是
true
FALSE
文本的使用(即解析器方面的),它们与SQL兼容(参考表中碰巧还包括SQL-92、SQL:2008和SQL:2011列)

SQLite文档列表中,该列表既不包含
TRUE
也不包含
FALSE
,因此SQLite很遗憾在这方面不符合要求

您还可以轻松地对其进行测试,并查看解析器在希望标记成为列名时是如何工作的:

$ sqlite3 :memory:
SQLite version 3.14.0 2016-07-26 15:17:14
sqlite> CREATE TABLE foo (booleanish INT);
sqlite> INSERT INTO foo (booleanish) VALUES (TRUE);
Error: no such column: TRUE

SQLite没有布尔类型,您应该使用整数,0为false,1为true

SQLite中是否有布尔文字

如中所述,SQLite没有布尔值的特定数据类型。但从它开始,它支持真/假文本:

  • 将TRUE和FALSE识别为常量。(为了兼容性,如果存在名为“TRUE”或“FALSE”的列,则标识符指的是这些列,而不是布尔常量。)

  • 支持运算符为TRUE、FALSE、NOT TRUE和NOT FALSE


  • 创建表时,可以使用
    布尔值:

    sqlite3 :memory:
    SQLite version 3.22.0 2018-01-22 18:45:57
    Enter ".help" for usage hints.
    sqlite> CREATE TABLE test (mybool BOOLEAN);
    
    但这不是真正的数据类型,在表的SQL描述中,我们将有如下内容:

    "mybool" BOOLEAN NOT NULL CHECK(mybool IN(0,1))
    
    基本上,我们创建一个SQL约束,该值应为0或1。因此,使用TRUE/FALSE将弹出一个错误:

    sqlite> INSERT INTO test(mybool) VALUES (TRUE);
    Error: no such column: TRUE
    
    因此,我们可以使用关键字
    BOOLEAN
    ,但必须使用0/1,因为它不是“真实”数据类型


    使用sqlalchemy时,我们可以使用数据类型布尔值而不会出现任何问题

    SQLite具有TRUE和FALSE文本,如下所示:


    (是的,需要很长时间才能回答:)

    正如其他人所指出的,SQLite不支持特定的布尔存储类型,OP明确承认这一事实。然而,这完全独立于SQLite是否支持布尔文本和理解

    对于任何想知道的人来说,答案是,因为SQLite 3.23可以使用布尔文本
    TRUE
    FALSE
    进行布尔理解,它将按照您的预期工作

    例如,您可以执行以下操作:

    从某些列为FALSE的blah中选择*;

    从某些列为真的废话中选择*;

    如果您使用
    
    
    sqlite> INSERT INTO test(mybool) VALUES (TRUE);
    Error: no such column: TRUE