Je connais le type boolean
column, mais existe-t-il un boolean
literal dans SQLite? Dans d'autres langues, il peut s'agir de true
ou false
. Évidemment, je peux utiliser 0
et 1
, mais j'ai tendance à éviter autant que possible les "nombres magiques".
D'après cette liste , il semble que cela puisse exister dans d'autres implémentations SQL, mais pas dans SQLite. (J'utilise SQLite 3.6.10, pour ce que ça vaut.)
De la section 1.1 Type de données booléen de la documentation:
SQLite n'a pas de classe de stockage booléenne séparée. Au lieu de cela, les valeurs booléennes sont stockées en tant que nombres entiers 0 (faux) et 1 (vrai).
On dirait que vous êtes coincé avec 0
et 1
.
1.1 Type de données booléen
SQLite n'a pas de classe de stockage booléenne séparée. Au lieu de cela, les valeurs booléennes sont stockées en tant que nombres entiers 0 (faux) et 1 (vrai).
La question ne concerne pas explicitement le type de colonne (c.-à-d. Stockage) mais l'utilisation des littéraux TRUE
et FALSE
(c.-à-d. Analyseurs), compatibles avec SQL comme d'après la documentation relative aux mots-clés de PostgreSQL (qui inclut également les colonnes SQL-92, SQL: 2008 et SQL: 2011 dans la table de référence).
La documentation de SQLite répertorie tous les mots-clés pris en charge , et cette liste ne contient ni TRUE
ni FALSE
; SQLite n'est donc malheureusement pas conforme à cet égard.
Vous pouvez également le tester facilement et voir comment l’analyseur fait des barfs quand il veut que le jeton soit un nom de colonne:
$ 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
Existe-t-il un littéral booléen dans SQLite?
Comme indiqué dans réponse de Justin Ethier , SQLite n'a pas de type de données spécifique pour le booléen. Mais à partir de SQLite 3.23.0 , il prend en charge les littéraux vrai/faux:
Reconnaître VRAI et FAUX en tant que constantes. (Pour des raisons de compatibilité, s'il existe des colonnes nommées "true" ou "false", les identificateurs font référence aux colonnes plutôt qu'aux constantes booléennes.)
Opérateurs de soutien IS VRAI, IS FAUX, IS NON VRAI et IS NON FAUX.
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 n'a pas de type booléen, vous devez utiliser INTEGER, 0 étant faux et 1 vrai
Il n'y a pas de type de données booléen. Il n'y a que 5 types, listés ici . Les entiers peuvent être stockés avec différentes largeurs sur le disque, le plus petit étant 1 octet. Cependant, ceci est un détail d'implémentation:
"Mais dès que les valeurs INTEGER sont lues sur le disque et enregistrées en mémoire pour le traitement de , Elles sont converties au type de données le plus général .__ (8 octets signés Entier)."
Cela dit, il n’est pas surprenant qu’il n’y ait pas de littéraux booléens.