SQL Server: miksi 'DBCC-sivu' raportoi 'Tinyint' on 2 byetes?

yritin selvittää, miten SQL Server tallentaa Tinyint (jonka oletetaan olevan 1-tavun mittainen) saraketta.

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

tässä tulos:

DBCC suoritus suoritettu. Jos DBCC tulostaa virheilmoituksia, ota yhteyttä järjestelmänvalvojaan.

sivu: (1: 182)………

Slot 0 Offset 0x60 Length 9

Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP Record Size = 9

Memory Dump @0x00000000545a060

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

Slot 0 sarake 1 Offset 0x4 Pituus 2 Pituus (fyysinen) 2

Col1 = 3

DBCC suoritus suoritettu. Jos DBCC tulostaa virheilmoituksia, ota yhteyttä järjestelmänvalvojaan.

tulkinta: todellinen tietorivi on 10 00 0600 0300 0100 00 as:
10: Tilabitit a
00: Tilabitti B
0600: sijainti, jossa sarakkeita on tallennettu
0300: Tinyint-tiedot
0100: sarakkeiden lukumäärä
00: Nollabittikartta
tavua yhteensä: 1 + 1 + 2 + 2 + 2 + 1 = 9 tavu
vertaamalla ”Smallinttiin”:
muuttamalla ”Col1” – tyyppi muotoon ”Smallint ” (joka on 2-tavuinen pitkä) saatiin täsmälleen sama tulos.
QuestionWhy omistaako SQL Server 2 tavua ”Tinyint ” – sarakkeelle? Miksi siinä ei eroteta ”Tinyint” ja ”Smallint” myymäläkoossa?

Share

Vastaa

Sähköpostiosoitettasi ei julkaista.