代码之家  ›  专栏  ›  技术社区  ›  Benjamin Oakes

SQLite中有布尔文字吗?

  •  55
  • Benjamin Oakes  · 技术社区  · 14 年前

    boolean 列类型 ,但是有没有 字面意义的 在SQLite中?在其他语言中,这可能是 true false 0 1 ,但我倾向于尽可能避免所谓的“幻数”。

    this list ,似乎它可能存在于其他SQL实现中,但不存在于SQLite中(我正在使用SQLite 3.6.10,这是值得的。)

    9 回复  |  直到 6 年前
        1
  •  93
  •   Justin Ethier    14 年前

    从节 1.1 Boolean Datatype

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

    看来你被困在 0 1 .

        2
  •  25
  •   Lukasz Szozda    5 年前

    SQLite中有布尔文字吗?

    如中所述 Justin Ethier's answer SQLite 3.23.0 它支持真/假文本:

    1. 把真假当作常量。

    2. 支持运算符是真的,是假的,不是真的,也不是假的。

    SELECT true AS t, false AS f;
    
    SELECT 'condition is true'
    WHERE 1 IS NOT FALSE;
    
    CREATE TABLE a (id INT, b BOOLEAN DEFAULT(TRUE));
    INSERT INTO a(id) VALUES(100);
    SELECT * FROM a;
    -- id  b
    -- 100 1
    
    SELECT * FROM a WHERE true;
    -- id  b
    -- 100 1
    

    dbfiddle.com demo

        3
  •  8
  •   Community noseratio    4 年前

    1.1布尔数据类型

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

    Docs

        4
  •  8
  •   Lloeki    7 年前

    列类型 TRUE FALSE 文本(即语法分析器),它与SQL兼容 per the PostgreSQL keywords documentation

    all supported keywords ,并且此列表既不包含 也不是 错误的 因此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
    
        5
  •  3
  •   Ryan    4 年前

    存储 类型,OP明确承认这一事实。但是,这与SQLite是否支持布尔无关 文字与理解

    对于任何想知道的人来说,答案是 ,因为SQLITE3.23,所以可以使用布尔文字进行布尔理解 TRUE FALSE

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

    SELECT * FROM blah WHERE some_column IS FALSE;

    SELECT * FROM blah WHERE some_column IS TRUE;

    0 为虚假和 1

    根据我的测试,以下是SQLite如何匹配各种值:

    • 任何非零数字、整数或实数: IS TRUE
    • 任何零数字、整数或实数: IS FALSE
    • 空值: IS NULL . 不匹配 .
    • 是假的 . 甚至像“t”、“TRUE”、“TRUE”、“TRUE”这样的值仍然匹配 是假的
    • 看起来像数字的文本(例如“0”、“1”、“5”):行为像上面列出的数字。
    • BLOB:未经测试。
        6
  •  0
  •   Matthew Flaschen    14 年前

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

    从磁盘读取并存入内存 处理时,它们将转换为 整数)

    鉴于此,没有布尔文字也就不足为奇了。

        7
  •  0
  •   Jorge Mendes    5 年前

    BOOLEAN 创建表时:

    sqlite3 :memory:
    SQLite version 3.22.0 2018-01-22 18:45:57
    Enter ".help" for usage hints.
    sqlite> CREATE TABLE test (mybool BOOLEAN);
    

    "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
    

    所以,我们可以用关键词 布尔值 但必须使用0/1,因为它不是“真正的”数据类型。

        8
  •  0
  •   HugO    5 年前

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

    https://www.sqlite.org/syntax/literal-value.html

    (是的,很长时间才回应:)

        9
  •  -1
  •   Akshay Patil    10 年前

    来自官方的SQLite3文档。

    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."
    

    如果要存储1s和0s,那么SQLite将使用1字节If存储。这还不错。 公文链接:- http://www.sqlite.org/datatype3.html

        10
  •  -1
  •   Mike Michaels    9 年前

    我注意到在sqlite for android中,我可以毫无错误地声明一个布尔列类型,而且它似乎工作正常。我还尝试将列定义为“int”并存储java布尔值。我下载了数据库,确认我在专栏里写的是“真的”。我觉得这很管用。

        11
  •  -2
  •   Tung Nguyen    7 年前

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

        12
  •  -3
  •   ceph3us    9 年前

    列关联

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

    • TEXT此列使用存储类NULL、TEXT或NULL存储所有数据 斑点。
    • 班级。
    • 整数的行为与具有数字相关性的列相同 在强制转换表达式中有一个异常。
    • NONE具有相似性的列NONE不喜欢一个存储类而不是另一个存储类,并且不尝试 将数据从一个存储类强制到另一个存储类。

    布尔数据类型:

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

    @麻鸭 另一方面,SQLite支持datetimes,尽管它不是这五种类型中的一种,所以这个答案是不确定的

    相反,SQLite的内置日期和时间函数能够将日期和时间存储为 短信,真的, 整数 价值观: