Los tipos CHAR y VARCHAR
        son similares, pero difieren en cómo se almacenan y recuperan.
        Desde MySQL 5.0.3, también difieren en la longitud máxima y en
        cómo se tratan los espacios finales.
      
        Los tipos CHAR y VARCHAR
        se declaran con una longitud que indica el máximo número de
        caracteres que quiere almacenar. Por ejemplo,
        CHAR(30) puede almacenar hasta 30 caracteres.
      
        La longitud de una columna CHAR se fija a la
        longitud que se declara al crear la tabla. La longitud puede ser
        cualquier valor de 0 a 255. Cuando los valores
        CHAR se almacenan, se añaden espacios a la
        derecha hasta las longitud específica. Cuando los valores
        CHAR se recuperan, estos espacios se borran.
      
        Los valores en columnas VARCHAR son cadenas
        de caracteres de longitud variable. En MySQL 5.0, la longitud
        puede especficarse de 0 a 255 antes de MySQL 5.0.3, y de 0 a
        65,535 en 5.0.3 y versiones posteriores. (La máxima longitud
        efectiva de un VARCHAR en MySQL 5.0 se
        determina por el tamaño de registro máximo y el conjunto de
        caracteres usados. La longitud máxima total es de 65,532
        bytes.)
      
        En contraste con CHAR,
        VARCHAR almacena los valores usando sólo los
        caracteres necesarios, más un byte adicional para la longitud
        (dos bytes para columnas que se declaran con una longitud
        superior a 255).
      
        Los valores VARCHAR no se cortan al
        almacenarse. El tratamiento de espacios al final depende de la
        versión. Desde MySQL 5.0.3, los espacios finales se almacenan
        con el valor y se retornan, según el estándar SQL. Antes de
        MySQL 5.0.3, los espacios finales se eliminan de los valores
        cuando se almacenan en una columna VARCHAR,
        esto significa que los espacios también están ausentes de los
        valores retornados.
      
Durante el almacenamiento y la recuperación de valores no hace ninguna conversión de mayúsculas y minúsculas.
        Si asigna un valor a una columna CHAR o
        VARCHAR que exceda la longitud máxima de la
        columna, el valor se trunca. Si los caracteres truncados no son
        espacios, se genera una advertencia. Puede hacer que aparezca un
        error en lugar de una advertencia usando modo SQL estricto.
        Consulte Sección 5.3.2, “El modo SQL del servidor”.
      
        Antes de MySQL 5.0.3, si necesita un tipo de datos para el que
        no se borren los espacios finales, considere usar un tipo
        BLOB o TEXT . También, si
        quiere almacenar valores binarios como resultados de
        encriptación o compresión que puedan contener valores byte
        arbitrarios, use una columna BLOB en lugar de
        CHAR o VARCHAR, para
        evitar problemas potenciales con eliminación de espacios
        finales que puedan cambiar los valores de los datos.
      
        La siguiente tabla ilustra las diferencias entre los dos tipos
        de columnas mostrando el resultado de almacenar varios valores
        de cadenas de caracteres en columnas CHAR(4)
        y VARCHAR(4) :
      
| Valor | CHAR(4) | Almacenamiento necesario | VARCHAR(4) | Almacenamiento necesario | 
| '' | '    ' | 4 bytes | '' | 1 byte | 
| 'ab' | 'ab  ' | 4 bytes | 'ab' | 3 bytes | 
| 'abcd' | 'abcd' | 4 bytes | 'abcd' | 5 bytes | 
| 'abcdefgh' | 'abcd' | 4 bytes | 'abcd' | 5 bytes | 
        Los valores retornados de las columnas
        CHAR(4) y VARCHAR(4) son
        los mismos en cada caso, ya que los espacios finales se eliminan
        en la recuperación de valores CHAR.
      
        En MySQL 5.0, los valores en columnas CHAR y
        VARCHAR se almacenan y comparan según la
        colación del conjunto de caracteres asignado a la columna.
      
        CHAR BYTE es un alias para CHAR
        BINARY. Existe por cuestión de compatibilidad.
      
        El atributo ASCII asigna el conjunto de
        caracteres latin1 a una columna
        CHAR . El atributo UNICODE
        asigna el conjunto de caracteres ucs2 .
      
        MySQL puede cambiar silenciosamente el tipo de una columna
        CHAR o VARCHAR en tiempo
        de creación. Consulte Sección 13.1.5.1, “Cambios tácitos en la especificación de columnas”.
      
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

