SQL Server: ¿Por qué 'Página DBCC' informe 'Tinyint' es de 2 byetes?

Traté de averiguar cómo SQL Server almacena la columna Tinyint (que se supone que tiene una longitud de 1 byte).

-- Create tableCREATE TABLE MyTest.dbo.TempTable( Col1 Tinyint NOT NULL);-- Fill it upINSERT INTO dbo.TempTable VALUES (3);-- Get page infodbcc ind('MyTest' /*Database Name*/,'dbo.TempTable' /*Table Name*/,-1 /*Display information for all pages of all indenxes*/);-- Get page datadbcc traceon(3604)dbcc page('MyTest' /*Database Name*/,1 /*File ID*/,182 /*Page ID*/,3 /*Output mode: 3 - display page header and row details */) 

Aquí está el resultado:

Ejecución de DBCC completada. Si DBCC imprimió mensajes de error, póngase en contacto con el administrador del sistema.

PÁGINA: (1:182)………

Ranura 0 Desplazamiento 0x60 Longitud 9

Tipo de registro = PRIMARY_RECORD Atributos de registro = NULL_BITMAP Tamaño de registro = 9

Volcado de memoria @0x000000000545A060

0000000000000000: 10000600 03000100 00†††††††††††††††††………

Ranura 0 Columna 1 Desplazamiento 0x4 Longitud 2 Longitud (física) 2

Col1 = 3

Ejecución de DBCC completada. Si DBCC imprimió mensajes de error, póngase en contacto con el administrador del sistema.

Interpretación: La fila de datos real es 10 00 0600 0300 0100 00 as:
10: Bits de estado A
00: Bit de estado B
0600: Posición donde se almacena el número de columnas
0300: Datos Tinyint
0100: Número de columnas
00: Mapa de bits nulo
Total de bytes: 1 + 1 + 2 + 2 + 2 + 1 = 9 bytes
Comparando con ‘Smallint’:
La alteración del tipo’ Col1 ‘ a ‘ Smallint ‘(que tiene una longitud de 2 bytes) produjo exactamente el mismo resultado.
Pregunta ¿Por qué SQL Server dedica 2 bytes a la columna » Tinyint«? ¿Por qué no distingue entre ‘Tinyint’ y ‘Smallint’ en el tamaño de la tienda?

Share

Deja una respuesta

Tu dirección de correo electrónico no será publicada.