Die Länge einer varchar-Spalte ist auf die Länge festgelegt, die Sie beim Erstellen der Tabelle deklarieren. Die Länge kann ein beliebiger Wert zwischen 0 und 255 (vor MySQL 5.0.3) und zwischen 0 und 65.535 (in MySQL 5.0.3 und höher) sein.
Die Speicherung des varchar besteht aus den Datenbytes, wobei ein oder zwei Bytes hinzugefügt werden, um die Länge der Zeichenfolge anzugeben. Wenn die maximale Länge 255 oder weniger beträgt, wird nur 1 Byte Länge hinzugefügt.
Wenn Sie alter table verwenden und die maximale Länge ändern, wird die Größe des Datenspeichers nicht beeinträchtigt, wenn die definierte maximale Länge unter 255 liegt. Wenn Sie die maximale Länge über 255 erhöhen, liegt es an der Speicher-Engine, ob sie zwei Bytes erzwingt oder nicht für Werte unter 255, in diesem Fall erhöht es sich um 1 Byte für jede Zeile.
Der char-Typ unterscheidet sich von varchar, da char immer den erforderlichen Platz verwendet. Wenn Sie also char(10) und varchar(10) hätten, aber jeweils nur "Hallo" gespeichert hätten, würde char alle 10 Bytes verwenden, vharchar würde 6 Bytes enthalten ( 5 für hallo und 1 für die Länge), daher wird durch das Ändern der Größe von varchar-Spalten nicht mehr Speicherplatz zugewiesen, als wenn es ein char-Typ wäre.
Die eigentliche Frage ist nun, warum Sie möchten, dass PHP die Varchar-Größe manipuliert. Sie sollten die Größe aus einem bestimmten Grund angeben, wenn Sie ein Feld mit variabler Länge wünschen, das viel Text aufnehmen kann (mehr als 65.535 Byte) und auch dynamisch ist, damit es nur den minimal erforderlichen Speicherplatz verwendet. Vielleicht sind die TEXT-Typen für Ihre Situation besser geeignet ?