Colonnes Bit vs.Boolean

12

Étant donné que les champs de bits ne sont que des représentations binaires de données et doivent être interrogés de manière légèrement "étrange".

Cela fournit-il réellement un avantage en utilisant un champ de bits pour une valeur booléenne? D'après ce que je peux voir, cela semble suggérer que l'espace est le seul véritable avantage.

Mark D
la source

Réponses:

14

Personnellement, j'utiliserais le BOOLEANpour une valeur booléenne. Mais gardez à l'esprit la mise en garde qui, dans MySQL, BOOLEANn'est qu'un synonyme de TINYINT(1) [src] .

Cela signifie bien sûr que vous pouvez avoir des valeurs autres que 0 ou 1 si vous ne faites pas attention. Pour éviter cela, vous pouvez utiliser les alias TRUEet FALSElors de l'insertion et de la mise à jour des données, car ceux-ci correspondent respectivement à 1 et 0.

Pour être complet, avant 5.0.3, BITétait également synonyme de TINYINT(1).

Derek Downey
la source
1

Si je comprends bien, BOOLEAN utilise toujours 1 octet par colonne mais BIT (n) utilisera aussi peu d'octets nécessaires pour contenir le nombre de bits donné.

Le BIT peut donc économiser de l'espace, mais BOOLEAN est plus facile à utiliser si vous devez les interroger avec SQL.

Si j'avais un ensemble de drapeaux compris par une application et stockés dans un seul champ de l'application, je chercherais à utiliser BIT (n). Cependant, si j'avais des colonnes qui devaient être interrogées à partir de SQL, j'utiliserais BOOLEAN.

Un exemple serait une application qui utilise des indicateurs pour enregistrer les semaines sur lesquelles un événement doit s'exécuter, avec un peu par semaine, étant 1 si l'événement s'exécute sur la semaine donnée. Si les données devaient être rendues faciles à interroger dans une base de données, elles seraient «normalisées» sur deux tables, mais si les données devaient uniquement être stockées dans la base de données, il est préférable de les conserver sous la forme utilisée par l'application. dans.

Ian Ringrose
la source