Trong SQL Server, tại sao một tinyint được lưu trữ với 9B trong hàng. Vì một số lý do, dường như có thêm một byte ở cuối mặt nạ bitmap NULL.
SỬ DỤNG tempdb;
ĐI
TẠO BẢNG Tbl
(
tôi TINYINT KHÔNG NULL
);
ĐI
XÁC NHẬN VÀO Tbl (i)
GIÁ TRỊ (1);
ĐI
DBCC IND ('tempdb', 'tbl', - 1);
ĐI
DBCC TRACEON (3604); - Trang kết xuất sẽ đi giao diện điều khiển
ĐI
TRANG DBCC ('tempdb', 1.168,3);
ĐI
Kết quả (Tôi đã đảo ngược các byte do DBCC PAGE hiển thị byte đầu tiên ít quan trọng nhất):
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!?)