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

ik probeerde erachter te komen hoe SQL Server Tinyint opslaat (wat 1-byte lang zou moeten zijn) kolom.

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

hier is het resultaat:

DBCC-uitvoering voltooid. Als DBCC foutmeldingen heeft afgedrukt, neem dan contact op met de systeembeheerder.

bladzijde: (1:182)………

Slot 0 Offset 0x60 Lengte 9

Record Type = PRIMARY_RECORD Record attributen = NULL_BITMAP Record Size = 9

Memory Dump @0x000000000545A060

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

Slot 0 kolom 1 Offset 0x4 lengte 2 Lengte (fysiek) 2

Col1 = 3

DBCC uitvoering voltooid. Als DBCC foutmeldingen heeft afgedrukt, neem dan contact op met de systeembeheerder.

interpretatie: de rij werkelijke gegevens is 10 00 0600 0300 0100 00 als:
10: Status bits A
00: Status bit B
0600: positie waar het aantal kolommen is opgeslagen
0300: Tinyint data
0100: aantal kolommen
00: Null bitmap
totale bytes: 1 + 1 + 2 + 2 + 2 + 1 = 9 bytes
vergeleken met’ Smallint’:
het wijzigen van het’ Col1 ‘-type naar’ Smallint ‘ (2-byte lang) leverde precies hetzelfde resultaat op.
vraag waarom wijdt SQL Server 2 bytes aan de kolom ‘ Tinyint‘? Waarom maakt het geen onderscheid tussen’ Tinyint ‘en’ Smallint ‘ in winkelgrootte?

Share

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.