Jus*_*ier 80
SQLite没有单独的布尔存储类.相反,布尔值存储为整数0(假)和1(真).
所以它看起来像你被卡住0
和1
.
Luk*_*zda 11
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
正如其他人指出的那样,SQLite 不支持特定的布尔存储类型,并且 OP 特别承认了这一事实。然而,这完全与 SQLite 是否支持布尔文字和推导式无关。
对于任何想知道的人来说,答案是YES,从 SQLite 3.23 开始,您可以使用布尔文字TRUE
和进行布尔推导FALSE
,并且它将按照您期望的方式工作。
例如,您可以执行以下操作:
SELECT * FROM blah WHERE some_column IS FALSE;
SELECT * FROM blah WHERE some_column IS TRUE;
0
如果您使用for false 和1
for true,它将按照您期望的方式工作。
根据我的测试,以下是 SQLite 如何匹配各种值的:
IS TRUE
IS FALSE
IS NULL
. 不匹配IS TRUE
或IS FALSE
。IS FALSE
。即使像“t”、“TRUE”、“true”、“True”这样的值仍然匹配IS FALSE
归档时间: |
|
查看次数: |
50889 次 |
最近记录: |