SQL Server: de ce ' DBCC Page' raport ' Tinyint' este 2 byetes?

am încercat să dau seama cum SQL Server stochează Tinyint (care ar trebui să fie 1-octet lung) coloană.

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

iată rezultatul:

execuția DBCC finalizată. Dacă DBCC a imprimat mesaje de eroare, contactați administratorul de sistem.

pagina: (1: 182)………

Slot 0 Offset 0x60 Lungime 9

Tip înregistrare = atribute înregistrare PRIMARY_RECORD = Null_bitmap Dimensiune înregistrare = 9

memorie Dump @0x000000000545a060

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

Slot 0 coloană 1 Offset 0x4 lungime 2 Lungime (fizic) 2

Col1 = 3

execuție DBCC finalizată. Dacă DBCC a imprimat mesaje de eroare, contactați administratorul de sistem.

interpretare: rândul de date real este 10 00 0600 0300 0100 00 as:
10: biți de stare A
00: Bitul de stare B
0600: poziția în care este stocat numărul de coloane
0300: date Tinyint
0100: Numărul de coloane
00: bitmap Null
total octeți: 1 + 1 + 2 + 2 + 2 + 1 = 9 bytes
comparativ cu ‘Smallint’:
modificarea tipului’ Col1 ‘la’ Smallint ‘ (care are o lungime de 2 octeți) a produs exact același rezultat.
Întrebarede ce SQL Server dedică 2 octeți coloanei’ Tinyint‘? De ce nu face distincția între ‘Tinyint’ și ‘Smallint’ în dimensiunea magazinului?

Share

Lasă un răspuns

Adresa ta de email nu va fi publicată.