Dalam SQL Server, mengapa tinyint disimpan dengan 9B di baris. Untuk beberapa alasan tampaknya ada tambahan satu byte pada akhir bitmap mask NULL.
GUNAKAN tempdb;
PERGILAH
CREATE TABLE tbl
(
SAYA TINYINT TIDAK NULL
);
PERGILAH
INSERT INTO tbl (i)
NILAI (1);
PERGILAH
DBCC IND ('tempdb', 'tbl', - 1);
PERGILAH
DBCC TRACEON (3604); - Halaman dump akan masuk ke konsol
PERGILAH
HALAMAN DBCC ('tempdb', 1.168,3);
PERGILAH
Hasil (Saya membalikkan byte karena DBCC PAGE menunjukkan byte paling signifikan pertama):
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!?)