Jaké "pravidlo VARCHAR(255)" máte na mysli?
Každý dodavatel databáze může implementovat VARCHAR, jak chce. Pravidla (a pokyny) pro VARCHAR nemusí být nutně stejná pro každou databázi.
Co se týče standardu SQL, moc jsem se tím nezabýval. Může to být dost volné, takže všechny implementace VARCHAR splňují standard. Pokud je standard SQL pro VARCHAR opravdu přísný, pak prodejci DBMS mohou standard buď rozšířit, nebo prostě nemusí být kompatibilní. Nemyslím si, že na skutečném standardu tolik záleží. Důležitá jsou skutečná pravidla vynucovaná DBMS.
Pokud jde o obecné vodítko, zadejte délku VARCHAR dostatečně dlouhou, aby vyhovovala systémovým požadavkům. Pokud je požadavkem systému povolit ne více než 200 znaků, pak bych uvedl délku jako VARCHAR(200)
.
Dalším obecným vodítkem je, že nedefinujte délky VARCHAR, které jsou větší, než musí být. Sloupce VARCHAR deklarované déle, než je nutné, mohou mít dopad na zdroje a výkon.
Limit Oracle pro délku VARCHAR je 4000 znaků. (V předchozích verzích Oracle bylo maximum 2000. Pokud potřebujete více než 4000 znaků, můžete použít CLOB
datový typ.
SQL Server limit na VARCHAR(8000)
, pokud nezadáte VARCHAR(MAX)
což umožňuje maximální velikost (v bajtech) 2^32-1.
MySQL má limit 65 535 pro maximální limit délky řádku. Takže to efektivně omezuje velikost VARCHAR na VARCHAR(21844), pokud používáte vícebajtovou znakovou sadu, jako je utf8. S jednobajtovou znakovou sadou (jako latin1) by maximum bylo VARCHAR(65532). Pokud potřebujete více znaků nebo narazíte na limit maximální délky řádku, můžete místo VARCHAR použít datový typ TEXT.
Většina implementací DBMS VARCHAR ukládá pole "délka" pro sloupec VARCHAR spolu s hodnotou. délka je uložena jako celé číslo.
V některých DBMS, pokud maximální délka (v bajtech) sloupce VARCHAR nepřesáhne 255 bajtů, může být pole délky implementováno jako jednobajtové celé číslo. Pokud sloupec umožňuje více než 255 bajtů, musí být pole délky větší než jeden bajt.
U dynamických formátů řádků, pokud jde o ukládání řádků, ukládajících 10 znaků ve sloupci, opravdu nezáleží na tom, zda je sloupec definován jako VARCHAR(30) nebo VARCHAR(1000). U pevných formátů řádků bude vyhrazen prostor pro maximální délku sloupce. Formát řádkových úložišť bude záviset na DBMS a v některých případech (MySQL) na úložišti a zadaném formátu řádků.
Ano, je rok 2016. A od představení prvního komerčního relačního databázového systému jsme ušli dlouhou cestu.
Databáze je pouze jednou částí systému. V aplikaci nebo jiných softwarových komponentách mohou existovat omezení. (Pokud je aplikace napsána v C a aplikace definuje strukturu s bajtovým polem pro pole, bude důležitý limit velikosti. Zvýšení povolené velikosti v databázi aplikaci automaticky neopraví .
Mohou existovat také délkové limity/omezení v kódu Javascript nebo v prvcích HTML webové stránky. Nebo mohou existovat omezení jiných softwarových komponent. Například některé ze skutečně starých ovladačů SQL Server ODBC mají limit 255 znaků (bajtů?) pro sloupce CHAR i VARCHAR.
Délka VARCHAR v databázi je tedy pouze částí příběhu.
I přes to všechno mi stále není jasné, co máte na mysli, když se ptáte
Můžeme porušit pravidlo VARCHAR(255)?
Zajímalo by mě, jaké "pravidlo" máte na mysli. Ve většině všech databází, o kterých vím, je možné definovat sloupce VARCHAR mnohem delší než 255 bajtů nebo 255 znaků. A když to uděláte, neporušíte žádné pravidlo.