Nej, brug af NULL vil ikke optage mindre plads end en tom VARCHAR
eller INT
Mark. Faktisk kan det tage mere plads. Her er grunden:
En VARCHAR
gemmes som en størrelse + værdi. Antallet af bytes, der bruges til størrelsen, afhænger af den maksimale lagring af VARCHAR
. VARCHAR(255)
kræver én byte, VARCHAR(65536)
kræver to bytes og så videre.
Så at VARCHAR(255)
kolonne fylder en byte, selvom du gemmer en tom streng. Den følgende tabel ville tage mindst én byte pr. række (plus nogle andre mulige overhead afhængigt af lagermotor).
CREATE TABLE sample (
a VARCHAR(255) NOT NULL
);
For at gemme NULL
værdier, bruger MySQL en bitmaske for hver række. Der kan gemmes op til 8 nullbare kolonner pr. byte. Så hvis du har et bord som dette:
CREATE TABLE sample (
a VARCHAR(255) NULL
);
Vil tage minimum to bytes pr. række. Gemmer NULL
indstiller bare bit, det er allerede reserveret, uanset om du bruger det eller ej. Byten for VARCHAR
's størrelse bruges stadig for hver række, selvom kolonnen er sat til NULL
.