CHAR alloue sa taille en ligne, VARCHAR stocke la taille réelle de la chaîne (2 octets) et ensuite la chaîne réelle, donc l'overhead de varchar est de +2 octets, et l'overhead de CHAR est - sa taille moins la longueur réelle de la chaîne. Si la valeur NULL est stockée dans varchar, sa taille dans la base de données est nulle.
Voir Anatomie du dossier
record header
4 bytes long
two bytes of record metadata (record type)
two bytes pointing forward in the record to the NULL bitmap
fixed length portion of the record, containing the columns storing data types that have fixed lengths (e.g. bigint, char(10), datetime)
NULL bitmap
two bytes for count of columns in the record
variable number of bytes to store one bit per column in the record, regardless of whether the column is nullable or not (this is
différente et plus simple que celle de SQL Server 2000 qui avait un bit par colonne annulable uniquement) ceci permet une optimisation lors de la lecture des colonnes qui sont NULL tableau de décalage de colonne de longueur variable deux octets pour le compte des colonnes de longueur variable deux octets par colonne de longueur variable, donnant le décalage jusqu'à la fin de la valeur de la colonne balise de versionnement Cette balise, qui n'existe que dans SQL Server 2005, est une structure de 14 octets qui contient un horodatage et un pointeur vers la version stockée dans le fichier tempdb