sql >> Databáze >  >> RDS >> Mysql

Důsledky nastavení hodnoty sloupce MySQL na NULL místo 0 nebo '' na místo na disku

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 .



  1. Vytvořte DISTINCT hodnoty v STRING_AGG

  2. MySQL extrahovat prostý text z html dat nebo PHP?

  3. Hodnoty Oracle Sequence nejsou objednány

  4. Výkon MySQL:JOIN ON vs