Non, l'utilisation de NULL ne prendra pas moins de place qu'un VARCHAR
vide ou INT
champ. En fait, cela peut prendre plus espace. Voici pourquoi :
Un VARCHAR
est stocké sous la forme d'une taille + valeur. Le nombre d'octets utilisés pour la taille dépend du stockage maximum du VARCHAR
. VARCHAR(255)
nécessite un octet, VARCHAR(65536)
nécessite deux octets et ainsi de suite.
Alors que VARCHAR(255)
La colonne occupe un octet même si vous stockez une chaîne vide. Le tableau suivant prendrait au minimum un octet par ligne (plus une autre surcharge possible en fonction du moteur de stockage).
CREATE TABLE sample (
a VARCHAR(255) NOT NULL
);
Pour enregistrer NULL
valeurs, MySQL utilise un masque de bits pour chaque ligne. Jusqu'à 8 colonnes nullables peuvent être stockées par octet. Donc, si vous avez un tableau comme celui-ci :
CREATE TABLE sample (
a VARCHAR(255) NULL
);
Prendrait un minimum de deux octets par ligne. Stockage de NULL
définit juste le bit, il est déjà réservé que vous l'utilisiez ou non. L'octet pour le VARCHAR
La taille de est toujours utilisée pour chaque ligne même si la colonne est définie sur NULL
.