W SQL Server dlaczego maleintka jest przechowywana z 9B w wierszu. Z jakiegoś powodu wydaje się, że na końcu maski bitmapowej NULL jest dodatkowy jeden bajt.
USE tempdb;
UDAĆ SIĘ
UTWÓRZ TABELĘ tbl
(
i TINYINT NOT NULL
);
UDAĆ SIĘ
INSERT INTO tbl (i)
WARTOŚCI (1);
UDAĆ SIĘ
DBCC IND („tempdb”, „tbl”, - 1);
UDAĆ SIĘ
DBCC TRACEON (3604); - Zrzut strony przejdzie do konsoli
UDAĆ SIĘ
STRONA DBCC („tempdb”, 1,168,3);
UDAĆ SIĘ
Wyniki (odwróciłem bajty, ponieważ strona DBCC pokazuje najpierw najmniej znaczący bajt):
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!?)