Ich kenne den boolean
column-Typ, aber gibt es in SQLite ein boolean
literal? In anderen Sprachen kann dies true
oder false
sein. Natürlich kann ich 0
und 1
verwenden, aber ich neige dazu, so genannte magische Zahlen zu vermeiden, wo dies möglich ist.
Aus dieser Liste scheint es in anderen SQL-Implementierungen zu existieren, aber nicht in SQLite. (Ich verwende SQLite 3.6.10, was es wert ist.)
Aus Abschnitt 1.1 Boolescher Datentyp der Dokumente:
SQLite hat keine separate boolesche Speicherklasse. Boolesche Werte werden stattdessen als Ganzzahlen 0 (falsch) und 1 (wahr) gespeichert.
Es sieht also so aus, als ob Sie mit 0
und 1
festsitzen.
1.1 Boolescher Datentyp
SQLite hat keine separate boolesche Speicherklasse. Boolesche Werte werden stattdessen als Ganzzahlen 0 (falsch) und 1 (wahr) gespeichert.
Die Frage bezieht sich ausdrücklich nicht auf den Spaltentyp (dh speicherseitig), sondern auf die Verwendung von TRUE
und FALSE
Literale (dh parser-weise), die SQL-kompatibel sind wie gemäß der PostgreSQL-Schlüsselwortdokumentation (was zufällig auch SQL-92-, SQL: 2008- und SQL: 2011-Spalten in der Referenztabelle enthält).
Die SQLite-Dokumentationslisten alle unterstützten Schlüsselwörter und diese Liste enthält weder TRUE
noch FALSE
, daher ist SQLite in dieser Hinsicht leider nicht konform.
Sie können es auch einfach testen und sehen, wie der Parser als Spaltenname für das Token angezeigt wird:
$ 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
Gibt es ein boolesches Literal in SQLite?
Wie in Justin Ethiers Antwort angegeben, hat SQLite keinen bestimmten Datentyp für Boolean. Ab SQLite 3.23.0 unterstützt jedoch True/False-Literale:
TRUE und FALSE als Konstanten erkennen. (Wenn aus Kompatibilitätsgründen Spalten mit den Namen "true" oder "false" vorhanden sind, beziehen sich die Bezeichner auf die Spalten und nicht auf boolesche Konstanten.)
Unterstützungsoperatoren IS TRUE, IS FALSE, IS NOT TRUE und IS NOT 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
SQLite hat keinen booleschen Typ, Sie sollten INTEGER verwenden, wobei 0 falsch und 1 wahr ist
Es gibt keinen booleschen Datentyp. Es gibt nur 5 Typen, die hier aufgelistet sind. Ganze Zahlen können mit verschiedenen Breiten auf der Festplatte gespeichert werden, wobei die kleinste 1 Byte ist. Dies ist jedoch ein Implementierungsdetail:
"Aber sobald INTEGER-Werte von der Festplatte und in den Speicher für die Verarbeitung von _ gelesen werden, werden sie in den allgemeinsten Datentyp konvertiert.
Angesichts dessen ist es nicht überraschend, dass es keine booleschen Literale gibt.