Réponses:
Ces types de données sont des synonymes.
Je vais adopter une approche différente ici et suggérer qu'il est tout aussi important pour vos collègues développeurs de comprendre votre code que pour le compilateur / base de données. L'utilisation de boolean peut faire la même chose que l'utilisation de tinyint, mais elle a l'avantage de transmettre sémantiquement votre intention, et cela vaut quelque chose.
Si vous utilisez un tinyint, il n'est pas évident que les seules valeurs que vous devriez voir sont 0 et 1. Un booléen est TOUJOURS vrai ou faux.
boolean
n'est pas un type de données distinct dans MySQL; c'est juste un synonyme de tinyint
. Voir cette page dans le manuel MySQL .
Personnellement, je suggérerais d'utiliser tinyint comme préférence, car boolean ne fait pas ce que vous pensez qu'il fait à partir du nom, ce qui rend le code potentiellement trompeur. Mais d'un point de vue pratique, cela n'a vraiment pas d'importance - ils font tous les deux la même chose, donc vous ne gagnez ni ne perdez rien en utilisant l'un ou l'autre.
utiliser enum c'est le plus simple et le plus rapide
Je ne recommanderai pas enum ou tinyint (1) car le bit (1) n'a besoin que de 1 bit pour stocker la valeur booléenne tandis que tinyint (1) a besoin de 8 bits.
réf
TINYINT vs ENUM (0, 1) pour les valeurs booléennes dans MySQL
BIT(M) - approximately (M+7)/8 bytes
voir: dev.mysql.com/doc/refman/8.0/en/storage-requirements.html
Il est vrai que bool
et tinyint(1)
sont fonctionnellement identiques, bool
devrait être l'option préférée , car elle porte le sens sémantique de ce que vous essayez de faire. De plus, de nombreux ORM seront convertis bool
en type booléen natif de votre langage de programmation.
Mon expérience en utilisant Dapper pour se connecter à MySQL est que cela compte . J'ai changé un bit non nullable (1) en un tinyint nullable (1) en utilisant le script suivant:
ALTER TABLE TableName MODIFY Setting BOOLEAN null;
Puis Dapper a commencé à lancer des exceptions. J'ai essayé de regarder la différence avant et après le script. Et j'ai remarqué que le bit (1) était devenu tinyint (1).
J'ai ensuite couru:
ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;
Ce qui a résolu le problème.
boolean
manière transparente commetinyint(1)
. Ainsi, vous pouvez utiliserboolean
,true
etfalse
et MySQL les traite commetinyint(1)
,1
et0
.