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!?)