ใน SQL Server เหตุใดจึงมีขนาดเล็กเก็บไว้กับ 9B ในแถว ด้วยเหตุผลบางอย่างดูเหมือนว่าจะมีหนึ่งไบต์เพิ่มเติมในตอนท้ายของรูปแบบบิตแมป NULL
ใช้ tempdb;
ไป
สร้างตาราง tbl
(
ฉัน TINYINT ไม่เป็นโมฆะ
);
ไป
ใส่เข้าไปใน tbl (i)
ค่า (1);
ไป
DBCC IND ('tempdb', 'tbl', - 1);
ไป
TRACEON DBCC (3604); - ดัมพ์เพจจะไปที่คอนโซล
ไป
หน้า DBCC ('tempdb', 1,168,3);
ไป
ผลลัพธ์ (ฉันย้อนกลับไบต์เนื่องจากหน้า DBCC แสดงไบต์ที่สำคัญน้อยที่สุดก่อน):
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!?)