Napk, desde MySQL 5.0.3 VARCHAR viene soportando un maximo de 65,400 mas o menos caracteres. Mis ejemplos son relativos, coloco CHAR(15) porque son eso ejemplos de tablas con registros chiquitos Ahora tengo una condicion personal, si es algo que yo asumo sobrepasara de 50 bytes (Una direccion por ejemplo) pues me voy con VARCHAR porque su tamanio es variable no fijo ni constante, pero si yo se que el estandar de un primer nombre no ocupa mas de 15 o 20 caracteres, pues para nombre lo ideal seria CHAR(20).
Porque CHAR y no VARCHAR... porque me gusta cuidar la integridad de mis datos que aunque aca influya tambien el motor de almacenamiento, si no me veo en la necesidad de dar uso de un motor transaccional por las funcionalidades que tiene y el consumo que exhige, tengo entonces yo que intentar cuidar la integridad de mis datos. Y si un tipo de dato puede ayudarme a cuidar mis registros chiquitos, le saco el provecho que requiero.
VARCHAR...simula VARCHAR como un sistema de archivos Ext2 o FAT32 donde la data se va insertando en distintos bloques sin orden alguno y dejando aveces algun bloquecito en medio vacio todo desfragmentado ahi, ocupara menos espacio de HD en un datafile, pero prefiero que me ocupe mas bytes de disco una data constante organizada en un motor no transaccional para data chiquita, que tener que cuidar espacio del disco en un motor no transaccional con una data desfragmentadora.
Cuestion de gustos de cada quien asumo