SQL Serverでは、tinyintが9Bの行に格納されているのはなぜですか。何らかの理由で、NULLビットマップマスクの最後に追加の1バイトがあるようです。
tempdbを使用します。 行く CREATE TABLE TBL ( i TINYINT NOT NULL ); 行く 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!?)