Estaba hurgando en SSMS y noté que el "tamaño" de mis INT
columnas era de 4 bytes (esperado) pero me sorprendió un poco ver que mis BIT
columnas eran un byte completo.
¿Entendí mal lo que estaba mirando?
sql-server
datatypes
Nate
fuente
fuente
Respuestas:
¿Cuántas columnas de bits ha definido en la tabla? Encontré esto en MSDN, dice que las columnas de 8 bits o menos se almacenan como un byte.
http://msdn.microsoft.com/en-us/library/ms177603.aspx
fuente
Sí.
Si solo tiene una
bit
columna en la tabla, entonces el almacenamiento utiliza unbyte
perobit
se pueden almacenar hasta 8 columnas en el mismo byte, por lo que las siguientes 7 son "libres" a ese respecto.También hay una necesidad de almacenamiento de 1 bit por columna para
NULL_BITMAP
(nuevamente redondeado al siguiente byte). En las páginas de datos, esto contiene unbit
para todas las columnas, independientemente de si lo permiten o noNULL
(con la excepción de las columnas anulables que se agregan más tarde ya que los metadatos solo cambian a través deALTER TABLE
donde la fila aún no se ha actualizado)fuente
BIT
usa un byte por fila, pero puede empaquetar hasta 8BIT
campos en ese almacenamiento de byte.Entonces, el primer campo cuesta un byte, ¡pero los siguientes siete son gratis !
fuente