O comprimento de uma coluna varchar é fixo ao comprimento que você declara ao criar a tabela. O comprimento pode ser qualquer valor de 0 a 255 (antes do MySQL 5.0.3) e de 0 a 65.535 (no MySQL 5.0.3 e posterior).
O armazenamento do varchar são os bytes de dados com a adição de um ou dois bytes para declarar o comprimento da string. Se o comprimento máximo for 255 ou menos, apenas 1 byte de comprimento será adicionado.
Se você usar alter table e alterar o comprimento máximo, nenhum tamanho de armazenamento de dados será afetado se o comprimento máximo definido for inferior a 255. Se você estiver aumentando o comprimento máximo acima de 255, caberá ao mecanismo de armazenamento forçar dois bytes ou não para valores abaixo de 255, nesse caso aumentará em 1 byte para cada linha.
O tipo char é diferente de varchar, pois char sempre usa o espaço necessário, então se você tivesse char(10) e varchar(10), mas apenas armazenasse "hello" em cada um, char usaria todos os 10 bytes, vharchar conteria 6 bytes ( 5 para olá e 1 para o comprimento), portanto, alterar o tamanho das colunas varchar não alocará mais espaço de armazenamento como faria se fosse um tipo char.
A verdadeira questão agora é por que você quer que o PHP manipule o tamanho do varchar? Você deve especificar o tamanho por um motivo, se quiser um campo de comprimento variável que possa conter muito texto (mais de 65.535 bytes) e também dinâmico para usar apenas o espaço mínimo necessário, talvez os tipos TEXT possam ser melhores para sua situação ?