SQLite中是否有一个布尔文字?

我知道关于boolean 列types ,但在SQLite中有一个boolean 文字 ? 在其他语言中,这可能是truefalse 。 显然,我可以使用01 ,但是我倾向于尽量避免所谓的“幻数”。

从这个列表中 ,似乎可能存在于其他SQL实现中,而不是SQLite。 (我正在使用SQLite 3.6.10,这是值得的。)

来自1.1节布尔文档数据types :

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

所以它看起来像你坚持01

1.1布尔数据types

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

文件

这个问题显然不是关于列types (即存储方式),而是使用TRUEFALSE文字(即parsing器方式),它们是按照PostgreSQL关键字文档 (这恰好也包括SQL-92 ,参考表中的SQL:2008和SQL:2011列)。

SQLite文档列出了所有支持的关键字 ,这个列表既不包含TRUE也不包含FALSE ,因此在这方面SQLite可悲的是不兼容。

您还可以轻松地进行testing,并查看parsing器barf如何使令牌成为列名称:

 $ 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 

没有布尔数据types。 这里只有5种types。 整数可以以不同的宽度存储在磁盘上,最小的是1个字节。 但是,这是一个实现细节:

“但是一旦INTEGER值从磁盘读取到内存中进行处理,它们将被转换为最通用的数据types(8字节有符号整数)。

鉴于此,没有布尔文字是不足为奇的。

SQLite没有布尔types,你应该使用INTEGER,0是假,1是真的

SQLite3只支持5种数据types。

从官方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个字节,如果存储。 这不坏。 官方文档链接: – http://www.sqlite.org/datatype3.html

我注意到在Android的SQLite,我可以声明一个布尔列types没有错误,它似乎工作正常。 我也尝试将列定义为“int”并存储java布尔值。 我下载了数据库,并确认我正在写“真”的列。 我认为这是正常的。

BOOLEAN – > NUMERIC(Affinity)

列亲和力

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

  • TEXT此列使用存储类NULL,TEXT或BLOB存储所有数据。
  • NUMERIC该列可能包含使用全部五个存储类的值。
  • INTEGER与具有NUMERIC关联性的列相同,CASTexpression式中有exception。
  • REAL就像一个NUMERIC相似的列,只是它将整数值强制为浮点表示
  • NONE与NONE关联的列不会偏好一个存储类而不是另一个存储类,也不会尝试将数据从一个存储类转换为另一个存储类。

布尔值数据types:

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

@ moiing-duck “另一方面,SQLite支持datetimes,尽pipe不是这五种types之一,所以这个答案是不确定的”

SQLite没有专门用于存储date和/或时间的存储类。 相反,SQLite的内置date和时间函数能够将date和时间存储为TEXT,REALINTEGER值: