web-dev-qa-db-fra.com

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

Dans le manuel MySQL, il dit:

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 0 comme valeur par défaut. Ensuite, je mets à jour la valeur à 2. Logiquement, je m'attendrais à ce que MySQL accepte soit 0 ou 1 puisque c'est un booléen. Cependant, MySQL n'a pas généré d'erreur ni m'a 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?

16

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 type bit.

12
dezso

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

2
Cato Minor

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 tout-petit avec un index sur la colonne. Lorsque j'appelle la requête suivante "expliquer sélectionner * dans le tableau où la colonne est vraie", cela indique qu'il va lire toutes les lignes du tableau (les colonnes "possible_keys" et "ref" sont nulles malgré la colonne "clé" montrant indice).

Changer la requête en "expliquer sélectionner * à partir de la table où colonne = 1" l'index entre correctement, avec les colonnes "clés possibles" et "réf" étant affectées de valeurs et "lignes" définies à 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.

0
user77843