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

varchar(20) a varchar(50) jsou stejné?

MySQL nabízí výběr úložných enginů. Fyzické úložiště dat závisí na úložišti.

MyISAM Storage of VARCHAR

V MyISAM VARCHAR s typicky zabírají pouze skutečnou délku řetězce plus jeden nebo dva bajty délky. To je praktické díky konstrukčnímu omezení MyISAM na zamykání tabulky na rozdíl od schopnosti zamykání řádků. Důsledky výkonu zahrnují kompaktnější profil mezipaměti, ale také komplikovanější (pomalejší) výpočet posunů záznamů.

(MyISAM vám ve skutečnosti poskytuje míru výběru mezi pevnou fyzickou velikostí řádku a proměnnou fyzickou velikostí řádků v závislosti na typech sloupců vyskytujících se v celé tabulce. Výskyt VARCHAR změní pouze výchozí metodu, ale přítomnost TEXT blob síly VARCHAR s ve stejné tabulce, chcete-li použít také metodu proměnné délky.)

Metoda fyzického ukládání je zvláště důležitá u indexů, což je jiný příběh než tabulky. MyISAM používá prostorovou kompresi pro obě CHAR a VARCHAR sloupce, což znamená, že kratší data v obou případech zabírají méně místa v indexu.

Úložiště InnoDB pro VARCHAR

InnoDB, stejně jako většina ostatních současných relačních databází, používá sofistikovanější mechanismus. VARCHAR sloupce, jejichž maximální šířka je menší než 768 bajtů, budou uloženy inline, přičemž vyhrazená místnost bude odpovídat této maximální šířce. Přesněji zde :

InnoDB v současné době neprovádí kompresi prostoru ve svých indexech, což je opak MyISAM, jak je popsáno výše.

Zpět k otázce

Vše výše uvedené je však pouze detail implementace, který se může mezi verzemi dokonce měnit. Skutečný rozdíl mezi CHAR a VARCHAR je sémantický, stejně jako ten mezi VARCHAR(20) a VARCHAR(50) . Zajištěním, že neexistuje způsob, jak uložit řetězec 30 znaků do VARCHAR(20) , databáze usnadňuje a lépe definuje život pro různé procesory a aplikace, které údajně integruje do předvídatelně se chovajícího řešení. To je velký problém.

Pokud jde konkrétně o osobní jména, tato otázka vám může poskytnout praktické rady. Lidé s celým jménem delším než 70 znaků UTF-8 mají každopádně potíže.



  1. Vysvětlete plán ve výkonu mysql pomocí Using dočasné; Pomocí řazení souborů; Použití podmínky indexu

  2. Použití sloupce Alias ​​v klauzuli where v ms-sql 2000

  3. MySQL GROUP od Regex?

  4. Je možné GROUP BY více sloupců pomocí MySQL?