Dans quels cas utiliseriez-vous qui? Y a-t-il une grande différence? Qu’est-ce que j’utilise généralement par les moteurs de persistance pour stocker des booléens?
Un TINYINT est une valeur entière de 8 bits, un champ BIT pouvant stocker entre 1 bit, BIT (1) et 64 bits, BIT (64). Pour une valeur booléenne, BIT (1) est assez courant.
alt text http://soffr.miximages.com/mysql/logo_mysql_sun_a.gif
À partir de la vue d’ensemble des types numériques ;
BIT [(M)]
Un type de champ de bits. M indique le nombre de bits par valeur, compris entre 1 et 64. La valeur par défaut est 1 si M est omis.
Ce type de données a été ajouté dans MySQL 5.0.3 pour MyISAM et étendu dans la version 5.0.5 à MEMORY, InnoDB, BDB et NDBCLUSTER. Avant 5.0.3, BIT est synonyme de TINYINT (1).
TINYINT [(M)] [UNSIGNED] [ZEROFILL]
Un très petit entier. La plage signée est comprise entre -128 et 127. La plage non signée est comprise entre 0 et 255.
En outre, considérez ceci;
BOOL, BOOLEAN
Ces types sont des 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.
Toutes ces discussions théoriques sont excellentes, mais en réalité, du moins si vous utilisez MySQL et vraiment pour SQLServer, il est préférable de conserver des données non binarys pour vos booléens pour la simple raison qu’il est plus facile de travailler avec vous. ‘sortie des données, interrogation et ainsi de suite. C’est particulièrement important si vous essayez de réaliser l’interopérabilité entre MySQL et SQLServer (c.-à-d. Que vous synchronisez les données entre les deux), car le traitement du type de données BIT est différent dans les deux. Donc, dans la pratique, vous aurez beaucoup moins de problèmes si vous restz avec un type de données numérique. Je recommande à MySQL de coller avec BOOL ou BOOLEAN qui est stocké sous TINYINT (1). Même si MySQL Workbench et l’administrateur MySQL affichent le type de données BIT, ce n’est pas très pratique (c’est un petit symbole pour les données binarys). Alors soyez pratique et évitez les tracas (et malheureusement, je parle par expérience).
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 pouvant être stockée dans un seul octet, à savoir -128..127 ou 0..255, selon qu’elle est ou non non signée (le 1 indique que vous ne souhaitez utiliser qu’un seul chiffre, mais ne vous empêche pas de stocker une plus grande valeur).
Pour les versions antérieures à la version 5.0.3, BIT est interprété comme TINYINT (1), il n’y a donc pas de différence.
BIT a une sémantique “this est un booléen”, et certaines applications considéreront TINYINT (1) de la même manière (en raison de la manière dont MySQL le traite), donc les applications peuvent formater la colonne en tant que case à cocher et décider d’un format basé sur cela.
Peut-être se tromper mais:
Tinyint est un entier compris entre 0 et 255
bit est soit 1 ou 0
Donc pour moi, le bit est le choix pour les booléens
De mon expérience, je vous dis que BIT a des problèmes sur les types de système d’exploitation Linux (Ubuntu pour ex). J’ai développé ma firebase database 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 dans des tables ayant BIT DATA TYPE.
Le bit n’est pas sûr pour l’instant. J’ai changé pour 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) ça va pour ça