SQL Server : Pourquoi ' la page DBCC ' signale-t-elle ' Tinyint ' est-elle 2 byetes ?

J’ai essayé de comprendre comment SQL Server stocke la colonne Tinyint (qui est censée avoir une longueur de 1 octet).

-- Create tableCREATE TABLE MyTest.dbo.TempTable( Col1 Tinyint NOT NULL);-- Fill it upINSERT INTO dbo.TempTable VALUES (3);-- Get page infodbcc ind('MyTest' /*Database Name*/,'dbo.TempTable' /*Table Name*/,-1 /*Display information for all pages of all indenxes*/);-- Get page datadbcc traceon(3604)dbcc page('MyTest' /*Database Name*/,1 /*File ID*/,182 /*Page ID*/,3 /*Output mode: 3 - display page header and row details */) 

Voici le résultat:

Exécution DBCC terminée. Si DBCC a imprimé des messages d’erreur, contactez votre administrateur système.

PAGE: (1:182)………

Emplacement 0 Décalage 0x60 Longueur 9

Type d’enregistrement = PRIMARY_RECORD Attributs d’enregistrement = NULL_BITMAP Taille de l’enregistrement = 9

Vidage de mémoire @ 0x000000000545A060

0000000000000000: 10000600 03000100 00†††††††††††††††††………

Emplacement 0 Colonne 1 Décalage 0x4 Longueur 2 Longueur (physique) 2

Col1 = 3

Exécution DBCC terminée. Si DBCC a imprimé des messages d’erreur, contactez votre administrateur système.

Interprétation: La ligne de données réelle est 10 00 0600 0300 0100 00 comme:
10: Bits d’état A
00: Bit d’état B
0600: Position où le nombre de colonnes est stocké
0300: Données Tinyint
0100: Nombre de colonnes
00: bitmap nul
Octets totaux: 1 + 1 + 2 + 2 + 2 + 1 = 9 bytes
En comparant avec ‘Smallint’:
La modification du type ‘Col1’ en ‘Smallint‘ (qui est long de 2 octets) a produit exactement le même résultat.
Questionpourquoi SQL Server consacre-t-il 2 octets à la colonne ‘Tinyint‘ ? Pourquoi ne fait-il pas la distinction entre « Tinyint » et « Smallint » en taille de magasin?

Share

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.