Délka sloupce varchar je pevně stanovena na délku, kterou deklarujete při vytváření tabulky. Délka může být jakákoliv hodnota od 0 do 255 (před MySQL 5.0.3) a od 0 do 65 535 (v MySQL 5.0.3 a novějších).
Úložištěm varchar jsou bajty dat s přidáním jednoho nebo dvou bajtů pro deklaraci délky řetězce. Pokud je maximální délka 255 nebo méně, bude přidán pouze 1 bajt délky.
Pokud použijete alter table a změníte maximální délku, nebude ovlivněna žádná velikost úložiště dat, pokud je maximální definovaná délka nižší než 255. Pokud zvyšujete maximální délku nad 255, pak je na úložném enginu, zda vynutí dva bajty nebo ne pro hodnoty pod 255, v takovém případě se zvýší o 1 bajt na každý řádek.
Typ char se liší od varchar, protože char vždy využívá požadovaný prostor, takže pokud byste měli char(10) a varchar(10), ale v každém jste uložili pouze „ahoj“, char by použil všech 10 bajtů, vharchar by pojal 6 bajtů ( 5 pro hello a 1 pro délku), proto změna velikosti sloupců varchar nepřidělí více úložného prostoru, jako kdyby to byl typ char.
Skutečnou otázkou nyní je, proč byste chtěli, aby PHP manipulovalo s velikostí varchar? Velikost byste měli zadat z nějakého důvodu, pokud chcete pole s proměnnou délkou, které pojme velké množství textu (více než 65 535 bajtů) a také dynamické, takže využívá pouze minimální požadovaný prostor, možná by pro vaši situaci mohly být lepší typy TEXT ?