SQLite中是否有一个布尔文字?
我知道关于boolean
列types ,但在SQLite中有一个boolean
文字 ? 在其他语言中,这可能是true
或false
。 显然,我可以使用0
和1
,但是我倾向于尽量避免所谓的“幻数”。
从这个列表中 ,似乎可能存在于其他SQL实现中,而不是SQLite。 (我正在使用SQLite 3.6.10,这是值得的。)
来自1.1节布尔文档数据types :
SQLite没有单独的布尔存储类。 相反,布尔值被存储为整数0(假)和1(真)。
所以它看起来像你坚持0
和1
。
1.1布尔数据types
SQLite没有单独的布尔存储类。 相反,布尔值被存储为整数0(假)和1(真)。
文件
这个问题显然不是关于列types (即存储方式),而是使用TRUE
和FALSE
文字(即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,REAL或INTEGER值: