Warum wird in SQL Server ein tinyint mit 9B in der Zeile gespeichert? Aus irgendeinem Grund scheint es am Ende der NULL-Bitmap-Maske ein zusätzliches Byte zu geben.
USE tempdb;
GEHEN
CREATE TABLE tbl
(
i TINYINT NICHT NULL
);
GEHEN
INSERT IN tbl (i)
WERTE (1);
GEHEN
DBCC IND ('tempdb', 'tbl', - 1);
GEHEN
DBCC TRACEON (3604); - Page Dump wird die Konsole gehen
GEHEN
DBCC PAGE ('tempdb', 1,168,3);
GEHEN
Ergebnisse (Ich habe die Bytes umgekehrt, da DBCC-PAGEs das niedrigstwertige Byte zuerst anzeigen):
Record Size = 9B
10000500 01010000 00
TagA = 0x10 = 1B
TagB = 0x00 = 1B
Null Bitmap Offset = 0x0005 = 2B
Our integer column = 0x01 = 1B
Column Count = 0x0001 = 2B
NULL Bitmap = 0x0000 = 2B (what!?)