Pourquoi PostgreSQL renvoie-t-il "T" et "F" au lieu de vrai et de faux?
Le Documentation elle-même nous conseille d'utiliser true et false lors de l'insertion de valeurs booléennes ou de faire des comparaisons, mais renvoie un ensemble de valeurs différent lors de la sélection de la valeur dans la base de données.
CREATE TABLE test1 (a boolean, b text);
INSERT INTO test1 VALUES (TRUE, 'sic est');
INSERT INTO test1 VALUES (FALSE, 'non est');
SELECT * FROM test1;
a | b
---+---------
t | sic est
f | non est
Y a-t-il une raison de ce comportement? Les communions PostgreSQL ont-elles déjà essayé de changer cela?
PostgreSQL ne les renvoie pas au lieu de valeurs booléennes. Ce sont des clients (par exemple, psql
et pgadminiii) qui représente TRUE
avec t
et FALSE
avec f
- essayez de la même manière Requête dans un autre client et vous verrez autre chose. Voir, par exemple, quel dbvisualizer vous donne:
Je suppose que la raison de montrer t
et f
is tout simplement sponger dans un client de ligne de commande qui manque de capacités de défilement horizontales.
Remarque: Je ne suis en aucun cas affilié au logiciel DBVIS.
Réponse de la communauté Wiki :
TRUE
et FALSE
tel que cité dans le contexte de la question sont des mots-clés et non des valeurs pouvant être renvoyées à un client. Si true
comme une valeur a été renvoyée, ce serait 4 fois plus grand que t
, donc ce n'est pas meilleur.
Statistiquement 1
et 0
sont souvent présents comme des chiffres afin qu'ils soient plus difficiles à distinguer. OTOH t
ou f
est un indice visuel fort que nous avons un Boolean
. Identique à Y
et N
dans une colonne char
.
boolean
n'est ni binary
ni A bitstring
. boolean
est boolean
et fonctionne avec un Ternary Logique autour des valeurs true
, false
et null
.
Certains autres PDRM n'ont pas une implémentation appropriée, qui peut ajouter à la confusion. Si tu veux 0
et 1
Au lieu de cela, je viens de jeter boolean
à integer
par ex. SELECT true::int
.
Mise à jour associée à Postgres 9.5 :
- Utilisez le comportement de moulage d'affectation pour les conversions de type de données dans les affectations PL/PGSQL, plutôt que de convertir et du texte (Tom Lane)
Ce changement provoque des conversions de booléens sur des chaînes pour produire vrai ou faux, pas t ou f. D'autres conversions de type peuvent réussir dans plus de cas qu'avant; Par exemple, l'attribution d'une valeur numérique 3.9 à une variable entière attribuera maintenant 4 plutôt que d'échouer. Si aucune moulage d'affectation n'est définie pour les types de source et de destination particuliers, PL/PGSQL redeviendra son ancien comportement de conversion d'E/S.