В SQL Server почему tinyint хранится с 9B в строке. По какой-то причине, кажется, есть дополнительный один байт в конце маски битовой карты NULL.
ИСПОЛЬЗОВАТЬ tempdb;
ИДТИ
СОЗДАТЬ СТОЛ TBL
(
я TINYINT НЕ NULL
);
ИДТИ
INSERT INTO tbl (i)
ЦЕННОСТИ (1);
ИДТИ
DBCC IND ('tempdb', 'tbl', - 1);
ИДТИ
DBCC TRACEON (3604); - Дамп страницы уйдет в консоль
ИДТИ
DBCC PAGE ('tempdb', 1 168,3);
ИДТИ
Результаты (я поменял местами байты из-за того, что DBCC PAGE сначала отображал младший байт):
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!?)