sql >> Databáze >  >> RDS >> Sqlserver

Jaké jsou případy použití pro výběr CHAR před VARCHAR v SQL?

Obecným pravidlem je vybrat CHAR pokud budou mít všechny řádky téměř stejnou délku . Vyberte VARCHAR (nebo NVARCHAR ), když se délka liší výrazně. CHAR může být také o něco rychlejší, protože všechny řádky mají stejnou délku.

Liší se podle implementace DB, ale obecně platí, že VARCHAR (nebo NVARCHAR ) používá jeden nebo dva další bajty úložiště (pro délku nebo ukončení) kromě skutečných dat. Takže (za předpokladu, že používáte jednobajtovou znakovou sadu) uložení slova "FooBar"

  • CHAR(6) =6 bajtů (žádná režie)
  • VARCHAR(100) =8 bajtů (2 bajty režie)
  • CHAR(10) =10 bajtů (4 bajty odpadu)

Sečteno a podtrženo je CHAR může být rychlejší a prostorově efektivní pro data relativně stejné délky (rozdíl v délce dvou znaků).

Poznámka :Microsoft SQL má 2 bajty režie pro VARCHAR. To se může lišit od DB k DB, ale obecně je potřeba alespoň 1 bajt režie k označení délky nebo EOL na VARCHAR.

Jak zdůraznil Gaven v komentářích:Věci se mění, pokud jde o vícebajtové znakové sady, a to je případ, kdy se VARCHAR stává mnohem lepší volbou.

Poznámka k deklarované délce VARCHAR :Protože ukládá délku skutečného obsahu, neztrácíte nevyužitou délku. Takže uložení 6 znaků do VARCHAR(6), VARCHAR(100), nebo VARCHAR(MAX) využívá stejné množství úložiště. Přečtěte si více o rozdílech při použití VARCHAR(MAX). Deklarujete maximum velikost ve VARCHAR, abyste omezili, kolik se uloží.

V komentářích AlwaysLearning poukázal na to, že dokumenty Microsoft Transact-SQL, zdá se, říkají opak. Navrhoval bych, že jde o chybu nebo alespoň dokumenty nejsou jasné.



  1. Výpočet hodnoty pomocí předchozí hodnoty řádku v T-SQL

  2. Jak NOT RLIKE funguje v MariaDB

  3. Jak najít výchozí jazyk uživatele na serveru SQL (T-SQL)

  4. Přidejte týdny k datu v PostgreSQL