web-dev-qa-db-fra.com

Une colonne Bit Server Server utilise-t-elle vraiment un espace d'octet complet d'espace?

Je perdais autour des SSMS et j'ai remarqué que la "taille" de mes colonnes INT étaient de 4 octets (attendus) mais j'étais un peu choqué de voir mes colonnes BIT étaient un octet complet.

Ai-je mal compris ce que je regardais?

20
Nate

Combien de colonnes de bits avez-vous définies dans la table? J'ai trouvé cela sur MSDN, il est indiqué que 8 colonnes ou moins de bits sont stockées comme un octet.

http://msdn.microsoft.com/en-us/library/ms177603.cox

17
SQLRockstar

Oui.

Si vous n'avez qu'une seule bit colonne dans la table, le stockage utilise un byte _ mais jusqu'à 8 bit colonnes peuvent être stockées dans le même octet afin que les 7 suivants soient "libres " à cet égard.

Il y a aussi un besoin de stockage de 1 bits par colonne pour le NULL_BITMAP (à nouveau arrondi à l'octet suivant). Dans les pages de données, ceci contient un bit pour toutes les colonnes quelles que soient ou non indiquent-ils ou non NULL (avec l'exception des colonnes nullables ajoutées plus tard en tant que métadonnées uniquement. passant par ALTER TABLE Où la ligne n'a pas encore été mise à jour)

14
Martin Smith