我知道boolean
列类型,但SQLite中有boolean
文字吗?在其他语言中,这可能是true
或false
.显然,我可以使用0
和1
,但我倾向于尽可能避免所谓的"魔术数字".
从这个列表中,它似乎可能存在于其他SQL实现中,但不存在于SQLite中.(我正在使用SQLite 3.6.10,它的价值.)
从1.1节文档的布尔数据类型:
SQLite没有单独的布尔存储类.相反,布尔值存储为整数0(假)和1(真).
所以它看起来像你被卡住0
和1
.
SQLite中是否有布尔文字?
如Justin Ethier的回答所述,SQLite没有针对布尔值的特定数据类型。但是从SQLite 3.23.0开始,它支持true / false文字:
将TRUE和FALSE识别为常量。(出于兼容性考虑,如果存在名为“ true”或“ false”的列,则标识符引用这些列而不是布尔常量。)
支持运算符为TRUE,FALSE,NOT TRUE和FALSE。
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演示
1.1布尔数据类型
SQLite没有单独的布尔存储类.相反,布尔值存储为整数0(假)和1(真).
文件
问题是明确不是关于列类型(即存储方式),而是使用TRUE
和FALSE
文字(即解析器),它们符合PostgreSQL关键字文档的 SQL兼容性(它恰好也包括SQL-92,SQL :参考表中的2008和SQL:2011列).
SQLite文档列出了所有支持的关键字,这个列表既不包含TRUE
也不包含FALSE
,因此SQLite在这方面可能不合规.
您还可以轻松地测试它,并查看解析器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