В 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!?)