web-dev-qa-db-fra.com

Pourquoi 't' et 'f' au lieu de vrai et faux

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?

6
hagnat

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:

enter image description here

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.

14
dezso

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.

2
user126897