Długość kolumny varchar jest ustalona na długość zadeklarowaną podczas tworzenia tabeli. Długość może być dowolną wartością od 0 do 255 (przed MySQL 5.0.3) i od 0 do 65 535 (w MySQL 5.0.3 i nowszych).
Przechowywanie varchar to bajty danych z dodatkiem jednego lub dwóch bajtów do zadeklarowania długości ciągu. Jeśli maksymalna długość wynosi 255 lub mniej, zostanie dodany tylko 1 bajt długości.
Jeśli użyjesz alter table i zmienisz maksymalną długość, nie wpłynie to na rozmiar przechowywania danych, jeśli maksymalna zdefiniowana długość jest mniejsza niż 255. Jeśli zwiększasz maksymalną długość powyżej 255, to od silnika pamięci zależy, czy wymusi dwa bajty lub nie dla wartości poniżej 255, w takim przypadku zwiększy się o 1 bajt dla każdego wiersza.
Typ char różni się od varchar, ponieważ char zawsze wykorzystuje wymaganą przestrzeń, więc jeśli masz char(10) i varchar(10), ale w każdym z nich przechowujesz tylko "hello", char zużyje wszystkie 10 bajtów, vharchar będzie zawierał 6 bajtów ( 5 dla hello i 1 dla długości), dlatego zmiana rozmiaru kolumn varchar nie przydzieli więcej miejsca do przechowywania, jak gdyby był to typ char.
Prawdziwe pytanie brzmi:dlaczego PHP miałby manipulować rozmiarem varchar? Powinieneś określić rozmiar z jakiegoś powodu, jeśli chcesz pole o zmiennej długości, które może pomieścić dużo tekstu (więcej niż 65 535 bajtów), a także dynamiczne, więc używa tylko minimalnej wymaganej przestrzeni, być może typy TEXT mogą być lepsze w twojej sytuacji ?