La longitud de una columna varchar se fija a la longitud que declara cuando crea la tabla. La longitud puede ser cualquier valor de 0 a 255 (antes de MySQL 5.0.3) y de 0 a 65 535 (en MySQL 5.0.3 y posteriores).
El almacenamiento del varchar son los bytes de datos con la adición de uno o dos bytes para declarar la longitud de la cadena. Si la longitud máxima es 255 o menos, solo se agregará 1 byte de longitud.
Si usa alterar tabla y cambia la longitud máxima, el tamaño de almacenamiento de datos no se verá afectado si la longitud máxima definida es inferior a 255. Si está aumentando la longitud máxima por encima de 255, depende del motor de almacenamiento si fuerza dos bytes o no para valores por debajo de 255, en ese caso aumentará en 1 byte por cada fila.
El tipo char es diferente a varchar ya que char siempre usa el espacio requerido, por lo que si tuviera char(10) y varchar(10) pero solo almacenara "hola" en cada uno, char usaría los 10 bytes, vharchar tendría 6 bytes ( 5 para hola y 1 para la longitud), por lo tanto, cambiar el tamaño de las columnas varchar no asignará más espacio de almacenamiento como lo haría si fuera un tipo char.
La verdadera pregunta ahora es ¿por qué querrías que PHP manipulara el tamaño de varchar? Debe especificar el tamaño por una razón, si desea un campo de longitud variable que pueda contener una gran cantidad de texto (más de 65,535 bytes) y también dinámico para que solo use el espacio mínimo requerido, tal vez los tipos de TEXTO podrían ser mejores para su situación ?