Nie, użycie NULL nie zajmie mniej miejsca niż pusty VARCHAR
lub INT
pole. W rzeczywistości może zająć więcej przestrzeń. Oto dlaczego:
VARCHAR
jest przechowywany jako rozmiar + wartość. Liczba bajtów użytych do określenia rozmiaru zależy od maksymalnej pojemności VARCHAR
. VARCHAR(255)
wymaga jednego bajtu, VARCHAR(65536)
wymaga dwóch bajtów i tak dalej.
Tak więc VARCHAR(255)
kolumna zajmuje jeden bajt, nawet jeśli przechowujesz pusty ciąg. Poniższa tabela zajęłaby co najmniej jeden bajt na wiersz (plus kilka innych możliwych narzutów w zależności od silnika pamięci masowej).
CREATE TABLE sample (
a VARCHAR(255) NOT NULL
);
Aby zapisać NULL
wartości, MySQL używa maski bitowej dla każdego wiersza. Na bajt można przechowywać do 8 kolumn dopuszczających wartość null. Więc jeśli masz taki stół:
CREATE TABLE sample (
a VARCHAR(255) NULL
);
Zajmie co najmniej dwa bajty na wiersz. Przechowywanie NULL
po prostu ustawia bit, jest już zarezerwowany, niezależnie od tego, czy go używasz, czy nie. Bajt dla VARCHAR
rozmiar jest nadal używany dla każdego wiersza, nawet jeśli kolumna jest ustawiona na NULL
.