SQL Server: proč 'DBCC Page' report 'Tinyint' je 2 byetes?

snažil jsem se přijít na to, jak SQL Server ukládá Tinyint (což má být 1-byte dlouhý) sloupec.

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

zde je výsledek:

provedení DBCC dokončeno. Pokud DBCC vytiskne chybové zprávy, obraťte se na správce systému.

strana: (1:182)………

Slot 0 Offset 0x60 Délka 9

Typ Záznamu = PRIMARY_RECORD Záznam Atributy = NULL_BITMAP Velikost Záznamu = 9

Výpis stavu Paměti @0x000000000545A060

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

Slot 0 Sloupec 1 Offset 0x4 délka 2 Délka (fyzická) 2

Col1 = 3

provedení DBCC dokončeno. Pokud DBCC vytiskne chybové zprávy, obraťte se na správce systému.

interpretace: skutečný datový řádek je 10 00 0600 0300 0100 00 as:
10: stavové bity a
00: Stavový bit B
0600: Pozice, kde počet sloupců je uložena
0300: Tinyint data
0100: Číslo sloupce
00: Null bitmap
Celkem bajtů: 1 + 1 + 2 + 2 + 2 + 1 = 9 bajtů
Srovnání s Smallint‘:
Změna ‚Sloupec1‘ typ ‚Smallint‚ (což je 2-byte dlouhá) vyrobená přesně stejný výsledek.
Questionproč SQL Server věnuje 2 bajty sloupci ‚Tinyint‚? Proč nerozlišuje mezi „Tinyint“ a „Smallint“ ve velikosti obchodu?

Share

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.