Nej, att använda NULL tar inte upp mindre utrymme än en tom VARCHAR
eller INT
fält. Faktum är att det kan ta mer Plats. Här är anledningen:
En VARCHAR
lagras som en storlek + värde. Antalet byte som används för storleken beror på maxlagringen av VARCHAR
. VARCHAR(255)
kräver en byte, VARCHAR(65536)
kräver två byte och så vidare.
Så att VARCHAR(255)
kolumnen tar upp en byte även om du lagrar en tom sträng. Följande tabell skulle ta minst en byte per rad (plus några andra möjliga overhead beroende på lagringsmotor).
CREATE TABLE sample (
a VARCHAR(255) NOT NULL
);
För att spara NULL
värden använder MySQL en bitmask för varje rad. Upp till 8 nollbara kolumner kan lagras per byte. Så om du har ett sådant här bord:
CREATE TABLE sample (
a VARCHAR(255) NULL
);
Skulle ta minst två byte per rad. Lagrar NULL
ställer bara in biten, den är redan reserverad oavsett om du använder den eller inte. Byten för VARCHAR
s storlek används fortfarande för varje rad även om kolumnen är inställd på NULL
.