SQL Server: dlaczego 'strona DBCC ' raport ' Tinyint' jest 2 Bytom?

próbowałem dowiedzieć się, jak SQL Server przechowuje Tinyint (która ma być 1-bajtowa) kolumnę.

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

oto wynik:

wykonanie DBCC zakończone. Jeśli DBCC wydrukował komunikaty o błędach, skontaktuj się z administratorem systemu.

strona: (1: 182)………

Slot 0 Offset 0x60 Długość 9

Typ rekordu = PRIMARY_RECORD Record Attributes = Null_bitmap Rozmiar rekordu = 9

zrzut pamięci @0x00000000545a060

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

Slot 0 Kolumna 1 przesunięcie 0x4 długość 2 Długość (fizyczna) 2

Col1 = 3

wykonanie DBCC zakończone. Jeśli DBCC wydrukował komunikaty o błędach, skontaktuj się z administratorem systemu.

interpretacja: rzeczywisty wiersz danych wynosi 10 00 0600 0300 0100 00 as:
10: bity stanu a
00: Stan bit B
0600: pozycja, w której zapisana jest liczba kolumn
0300: dane Tinyint
0100: Liczba kolumn
00: Null bitmap
Total bytes: 1 + 1 + 2 + 2 + 2 + 1 = 9 bajty
w porównaniu z 'Smallint’:
Zmiana typu’ Col1 'na’ Smallint ’ (który ma długość 2 bajtów) daje dokładnie ten sam wynik.
pytanie dlaczego SQL Server poświęca 2 bajty kolumnie ’ Tinyint’? Dlaczego nie rozróżnia „Tinyint” i „Smallint” w rozmiarze sklepu?

Share

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.