SQL Server: miért 'DBCC oldal' jelentés 'Tinyint' 2 byetes?

megpróbáltam kitalálni, hogy az SQL Server hogyan tárolja a Tinyint (amely állítólag 1 bájt hosszú) oszlopot.

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

itt az eredmény:

a DBCC végrehajtása befejeződött. Ha DBCC nyomtatott hibaüzenetek, forduljon a rendszergazdához.

oldal: (1: 182)………

Slot 0 Offset 0x60 hossza 9

rekord típusa = PRIMARY_RECORD rekord attribútumok = NULL_BITMAP rekord mérete = 9

memória Dump @0x000000000545A060

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

rés 0 oszlop 1 Offset 0x4 Hossz 2 Hossz (fizikai) 2

Col1 = 3

DBCC végrehajtás befejeződött. Ha DBCC nyomtatott hibaüzenetek, forduljon a rendszergazdához.

értelmezés: a tényleges adatsor 10 00 0600 0300 0100 00 as:
10: Állapotbitek a
00: Állapot bit B
0600: az oszlopok számának tárolási helye
0300: Tinyint adatok
0100: oszlopok száma
00: Null bitmap
Összes bájt: 1 + 1 + 2 + 2 + 2 + 1 = 9
bájtok a ‘Smallint’-hez képest:
a ‘Col1’ típus ‘Smallint‘ – re változtatása (ami 2 bájt hosszú) pontosan ugyanazt az eredményt hozta.
Kérdésmiért szentel az SQL Server 2 bájtot a ‘Tinyint ‘ oszlopnak? Miért nem tesz különbséget a ‘Tinyint’ és a ‘Smallint’ között a bolti méretben?

Share

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.