SQL Server: Why does 'DBCC Page' report 'Tinyint' is 2 byetes?

I tried to figure out how SQL Server stores Tinyint (which is supposed to be 1-byte long) column.

-- 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 */) 

aqui está o resultado:

execução DBCC concluída. Se o DBCC imprimiu mensagens de erro, contacte o seu administrador de Sistema.

PAGE: (1: 182)………

Slot 0 Deslocamento 0x60 Comprimento de 9

Tipo de Registro = PRIMARY_RECORD Atributos de Registro = NULL_BITMAP Tamanho do Registro = 9

Despejo de Memória @0x000000000545A060

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

Slot 0 coluna 1 Offset 0x4 Comprimento 2 Comprimento (físico) 2

Col1 = 3

DBCC execução concluída. Se o DBCC imprimiu mensagens de erro, contacte o seu administrador de Sistema.Interpretação: a linha de dados actual é 10 00 0600 0300 0100 00 como:
10: bits de Estado a
00: Bit de Status B
0600: Posição em que o número de colunas é armazenado
0300: Tinyint de dados
0100: Número da coluna
00: Null bitmap
Total de bytes: 1 + 1 + 2 + 2 + 2 + 1 = 9 bytes
Comparando com ‘Smallint’:
Alterar ‘Col1 de tipo’ a ‘Smallint‘ (que é de 2 bytes) produzido exatamente o mesmo resultado. O servidor SQL dedica 2 bytes à coluna ‘Tinyint‘? Por que não distingue entre “Tinyint” e “Smallint” em tamanho de loja?

Share

Deixe uma resposta

O seu endereço de email não será publicado.