hvorfor ' DBCC Page'rapport ' Tinyint' er 2 byetes?

jeg forsøgte at finde ud af, hvordan serveren lagrer Tinyint (som skal være 1-byte lang) kolonne.

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

her er resultatet:

DBCC udførelse afsluttet. Hvis DBCC udskrev fejlmeddelelser, skal du kontakte systemadministratoren.

side: (1: 182)………

Slot 0 Offset 0h60 Længde 9

Optagetype = PRIMARY_RECORD Rekordattributter = NULL_BITMAP rekordstørrelse = 9

hukommelsesdump @0h00000000545a060

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

Slot 0 kolonne 1 Offset 0H4 længde 2 Længde (fysisk) 2

Col1 = 3

DBCC udførelse afsluttet. Hvis DBCC udskrev fejlmeddelelser, skal du kontakte systemadministratoren.

fortolkning: den faktiske data række er 10 00 0600 0300 0100 00 som:
10: Status bits a
00: Status bit B
0600: Position, hvor antallet af kolonner er gemt
0300: Tinyint data
0100: antal kolonne
00: Null bitmap
samlede bytes: 1 + 1 + 2 + 2 + 2 + 1 = 9 bytes
sammenligning med’ Smallint’:
ændring af’ Col1 ‘type til’ Smallint ‘ (som er 2-byte lang) producerede nøjagtigt det samme resultat.
Spørgsmålhvorfor dedikerer vi 2 bytes til’ Tinyint ‘ kolonne? Hvorfor skelner det ikke mellem’ Tinyint ‘og’ Smallint ‘ i butiksstørrelse?

Share

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.