Dans quels cas utiliseriez-vous lequel? Y a-t-il une grande différence? Lequel j'utilise généralement par les moteurs de persistance pour stocker des booléens?
106
Un TINYINT est une valeur entière de 8 bits, un champ BIT peut stocker entre 1 bit, BIT (1) et 64 bits, BIT (64). Pour une valeur booléenne, BIT (1) est assez courant.
De Vue d'ensemble des types numériques ;
BIT [(M)]
TINYINT [(M)] [UNSIGNED] [ZEROFILL]
Considérez également ceci;
BOOL, BOOLÉEN
la source
boolean
cela prendra un octet même si c'est vraiment juste un peu, donc un BIT (1) est meilleur après la v5.0.3?BOOL
/BOOLEAN
soient des alias pourTINYINT(1)
au lieu deBIT
. Bien sûr, ils finissent tous par occuper un octet entier, mais sémantiquement, ceBIT
serait beaucoup plus approprié.Toutes ces discussions théoriques sont excellentes, mais en réalité, au moins si vous utilisez MySQL et vraiment aussi pour SQLServer, il est préférable de s'en tenir aux données non binaires pour vos booléens pour la simple raison qu'il est plus facile de travailler avec lorsque vous 'sortez les données, interrogez et ainsi de suite. C'est particulièrement important si vous essayez d'atteindre l'interopérabilité entre MySQL et SQLServer (c'est-à-dire que vous synchronisez les données entre les deux), car la gestion du type de données BIT est différente dans les deux. Ainsi, dans la pratique, vous aurez beaucoup moins de tracas si vous vous en tenez à un type de données numérique. Je recommanderais à MySQL de s'en tenir à BOOL ou BOOLEAN qui est stocké en tant que TINYINT (1). Même la façon dont MySQL Workbench et MySQL Administrator affichent le type de données BIT n'est pas agréable (c'est un petit symbole pour les données binaires).
la source
BIT ne doit autoriser que 0 et 1 (et NULL, si le champ n'est pas défini comme NOT NULL). TINYINT (1) autorise toute valeur qui peut être stockée dans un seul octet, -128..127 ou 0..255 selon qu'elle n'est pas signée ou non (le 1 indique que vous avez l'intention de n'utiliser qu'un seul chiffre, mais il le fait ne vous empêche pas de stocker une valeur plus grande).
Pour les versions antérieures à 5.0.3, BIT est interprété comme TINYINT (1), il n'y a donc aucune différence.
BIT a une sémantique «ceci est un booléen», et certaines applications considéreront TINYINT (1) de la même manière (en raison de la façon dont MySQL le traitait), de sorte que les applications peuvent formater la colonne comme une case à cocher si elles vérifient le type et décidez d'un format basé sur cela.
la source
Cela peut être faux mais:
Tinyint est un entier compris entre 0 et 255
le bit vaut 1 ou 0
Par conséquent, pour moi, le choix des booléens est un peu
la source
D'après mon expérience, je vous dis que BIT a des problèmes sur les types d'OS Linux (Ubuntu par exemple). J'ai développé ma base de données sur Windows et après avoir tout déployé sur Linux, j'ai eu des problèmes avec les requêtes insérées ou sélectionnées à partir de tables contenant le TYPE DE DONNÉES BIT.
Bit n'est pas sûr pour le moment. Je suis passé à tinyint (1) et j'ai parfaitement fonctionné. Je veux dire que vous avez seulement besoin d'une valeur pour différencier si c'est 1 ou 0 et tinyint (1) c'est ok pour ça
la source