Quel type de colonne convient le mieux d'utiliser dans une base de données MySQL pour les valeurs booléennes? J'utilise boolean
mais mon collègue utilise tinyint(1)
.Boolean vs tinyint (1) pour les valeurs booléennes dans MySQL
Répondre
Ces types de données sont synonymes.
Yep - http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html –
Je ne dirais pas que les données _types_ sont synonymes - tinyint (1) est le même que bool , mais tinyint et bool ne sont pas les mêmes.Point mineur, mais votre réponse m'a fait trébucher la première fois que je l'ai lu –
Cela ne répond pas à la question. S'il est vrai que tinyint (1) est fonctionnellement identique à bool, l'OP a demandé ce qu'il y avait de mieux à utiliser. La réponse de @dj_segfault fait un bon travail expliquant pourquoi bool devrait être préféré à tinyint (1) lors du stockage d'une valeur booléenne. –
boolean
n'est pas un type de données distinct dans MySQL; c'est juste un synonyme pour tinyint
. See this page in the MySQL manual.
Personnellement, je suggère d'utiliser tinyint en tant que préférence, parce que booléen ne fait pas ce que vous pensez qu'il fait du nom, donc il fait un code potentiellement trompeur. Mais à un niveau pratique, cela n'a pas vraiment d'importance - ils font tous les deux la même chose, donc vous ne gagnez pas ou ne perdez rien en utilisant non plus.
utilisation ENUM son facile et le plus rapide de la
je ne recommande pas ENUM ou tinyint (1) bit (1) n'a besoin que d'1 bit pour stocker la valeur booléenne en tinyint (1) a besoin de 8 bits.
ref
Nous ne pouvons pas utiliser enum car notre base de données doit également prendre en charge sqlite – tom
Si vous utilisez InnoDB, bit finit avec autant d'espace que tinyint. De [High Performance MySQL] (http://www.amazon.com/High-Performance-MySQL-Optimization-Replication/dp/1449314287/) (les gars de percona) "InnoDB stocke [s] chaque colonne [bit] comme le plus petit type entier assez grand pour contenir les bits, donc vous ne sauvegardez pas d'espace de stockage. " Le seul gain est si vous stockez plusieurs valeurs booléennes dans une colonne BIT (morethan1). Donc, si vous n'avez qu'un seul champ booléen, l'utilisation de tinyint est la même chose que dans InnoDB, et c'est préférable car tinyint est généralement plus facile à utiliser. – billmalarky
Je vais prendre une approche différente ici et suggèrent qu'il est tout aussi important pour vos collègues développeurs de comprendre votre code comme 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 la peine.
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.
Mon expérience lors de l'utilisation Dapper pour se connecter à MySQL est que cela importe. J'ai changé un peu non annulable (1) à un annulable tinyint (1) en utilisant le script suivant:
ALTER TABLE TableName MODIFY Setting BOOLEAN null;
Alors Dapper commencé à jeter des exceptions. J'ai essayé de regarder la différence avant et après le script. Et remarqué que le bit (1) avait changé en tinyint (1).
Je puis a couru:
ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;
qui a résolu le problème.
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. En outre, de nombreux ORM convertissent bool
en type booléen natif de votre langage de programmation.
- 1. Hibernate JPA, MySQL et TinyInt (1) pour Boolean au lieu de bits ou char
- 2. MySQL boolean - inverser la valeur?
- 3. Comptage des valeurs booléennes sous les rails
- 4. SQL Server 2008: tinyint vs bit
- 5. Graphique pour la liste des valeurs booléennes
- 6. mysql boolean joins
- 7. Aide HTML pour les valeurs booléennes dans asp.net mvc
- 8. Parse valeurs booléennes dans les chaînes à utiliser avec Function.apply
- 9. MySQL valeurs limites à 1 et 0
- 10. Comment gérer les valeurs NULL dans les colonnes de type boolean dans MS Access?
- 11. java: boucle sur les deux valeurs booléennes (false, true)
- 12. valeurs booléennes Objectif c
- 13. Création des migrations pour les vues SQL dans les rails avec des valeurs booléennes
- 14. PHP5 sqli bind_param problème avec les valeurs booléennes de liaison
- 15. Enregistrer des valeurs booléennes: groupées ou individuellement?
- 16. Trier les objets par des valeurs booléennes dans Ruby
- 17. « Afficher tous sauf » dans MySQL Boolean Recherche en texte
- 18. Quelle est la valeur maximale de tinyint (2) dans MySQL?
- 19. Que dois-je utiliser pour les valeurs booléennes dans les formules, vraies, « true » ou true()
- 20. Stockage des valeurs booléennes En SQL?
- 21. Fonction d'agrégation Select ou boolean dans PostgreSQL
- 22. Convertir les types tinyint de MySQL en bit
- 23. Des valeurs booléennes négatives sont-elles définies?
- 24. BIT (1) vs ENUM ('inconnu', 'masculin', 'féminin') dans MySQL
- 25. Comment puis-je convertir des valeurs booléennes JSON pour la sortie en utilisant XMLout?
- 26. SqlBulkCopy impossible d'analyser les valeurs booléennes "0" et "1" dans BIT sur la table de base de données
- 27. évaluation de l'expression des valeurs booléennes
- 28. MySQL match contre - IN BOOLEAN MODE?
- 29. java: boolean instanceOf Boolean?
- 30. Outil pour refactoriser les expressions booléennes
Il semble que MySQL traite de façon transparente 'boolean' comme' tinyint (1) '. Vous pouvez donc utiliser 'boolean',' true' et 'false' et MySQL les traite comme' tinyint (1) ',' 1' et '0'. – ADTC
Un autre cas est char 1 avec Y & N qui est censé être plus rapide par certaines personnes. – Zon