Quel est l'avantage d'utiliser BOOLEAN par rapport à TINYINT (1)?


16

Dans le manuel MySQL, il est écrit:

BOOL, BOOLEAN

Ces types sont synonymes de TINYINT (1). Une valeur de zéro est considérée comme fausse. Les valeurs non nulles sont considérées comme vraies:

J'ai créé une colonne BOOLEAN avec 0comme valeur par défaut. Ensuite, je mets à jour la valeur 2. Logiquement, je m'attendrais à ce que MySQL accepte l'un 0ou l' autre, 1car il s'agit d'un booléen. Cependant, MySQL n'a pas généré d'erreur et ne m'a pas empêché d'effectuer la mise à jour.

Si BOOLEAN fonctionne exactement de la même manière que TINYINT (1), cela fait-il une différence que j'utilise TINYINT (1) ou BOOLEAN?

Réponses:


11

Ces deux sont vraiment des synonymes, vous pouvez donc les utiliser de manière interchangeable. Vous ne verrez aucune différence entre eux.

Si vous souhaitez autoriser uniquement 0 et 1, vous pouvez toujours utiliser le bittype.


1
@QuestionOverflow Gardez à l'esprit qu'il BITs'agit vraiment d'un champ de bits qui contient de un à soixante-quatre bits de manière compacte.
David Harkness

2

Si vous travaillez avec d'autres personnes (ou si vous souhaitez vous en souvenir), vous pouvez utiliser le type de données BOOLEANpour suggérer que les données sont uniquement destinées à prendre une valeur de 1 ou 0.


0

Il me semble qu'il y a bien une différence.

Dans une table que j'utilise, j'ai une colonne définie comme un minuscule avec un index sur la colonne. Lorsque j'appelle la requête suivante "expliquer la sélection * de la table où la colonne est vraie", cela indique qu'il va lire toutes les lignes de la table (les colonnes "possible_keys" et "ref" sont nulles malgré la colonne "clé" montrant la indice).

Changer la requête en "expliquer sélectionner * dans le tableau où colonne = 1" l'index entre correctement, avec les colonnes "clés possibles" et "ref" auxquelles des valeurs sont attribuées et les "lignes" sont définies sur un nombre beaucoup plus faible.

J'ai également essayé de remplacer le "vrai" par "faux" et le 1 par un 0 et j'ai obtenu des résultats comparables.

Pour aller plus loin, je suis passé d'un minuscule à un int et cela n'a fait aucune différence.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.