Ne, použití NULL nezabere méně místa než prázdný VARCHAR
nebo INT
pole. Ve skutečnosti to může zabrat více prostor. Zde je důvod:
A VARCHAR
je uložena jako velikost + hodnota. Počet bajtů použitých pro velikost závisí na maximální velikosti úložiště VARCHAR
. VARCHAR(255)
vyžaduje jeden bajt, VARCHAR(65536)
vyžaduje dva bajty a tak dále.
Takže VARCHAR(255)
sloupec zabírá jeden bajt, i když uložíte prázdný řetězec. Následující tabulka by zabrala minimálně jeden bajt na řádek (plus některé další možné režie v závislosti na úložišti).
CREATE TABLE sample (
a VARCHAR(255) NOT NULL
);
Chcete-li uložit NULL
hodnoty, používá MySQL pro každý řádek bitovou masku. Na jeden bajt lze uložit až 8 sloupců s možnou hodnotou Null. Takže pokud máte tabulku jako je tato:
CREATE TABLE sample (
a VARCHAR(255) NULL
);
Bude trvat minimálně dva bajty na řádek. Ukládání NULL
jen nastaví bit, už je rezervovaný, ať už ho používáte nebo ne. Bajt pro VARCHAR
velikost se stále používá pro každý řádek, i když je sloupec nastaven na NULL
.