Usos de Varchar y Char

Balu19 Agosto 2010 - 4:15am 3 comentarios
Enviar por Email Imprimir

Varchar y Char son los tipos de cadenas más utilizados en el diseño de base de datos MySQL. La mayoría de programadores sabe que la principal diferencia entre ambos, es que la primera es de longitud variable y la segunda soporta longitudes de datos fijos. Pero hay quienes pueden tener los conceptos no tan claros y pensar que Varchar, puede reemplazar perfectamente a Char en todos los casos.

En este artículo vamos a comparar ambos tipos de cadenas, para poder elegirlas correctamente a la hora de crear los campos de una tabla y definir que tipo de cadena usar...

¿Cuál es la diferencia entre Varchar y Char?

Para empezar, hay que mencionar que Varchar y Char son dos tipos de cadenas muy similares; es más, originalmente, ambos tipos eran idénticos y diferían únicamente en la manera cómo se almacenaban (su formato de almacenamiento). En la actualidad, desde MySQL 5.0.3, también difieren en la longitud máxima y en cómo se tratan los espacios finales.

Hagamos pues una comparación general de ambos:

  1. Como bien saben, cuando se declara un tipo Varchar o Char, se le declara con una longitud que indica el número máximo de caracteres que puede almacenar. Por ejemplo, Varchar(255) ó Char(30). La diferencia esta en que mientras Varchar almacena cadenas de caracteres de longitud variable (es lo más común), Char almacena datos de longitud fija. Por ejemplo, si insertamos una cadena de 25 caracteres y la longitud del campo tipo Char es 30, se añadirán espacios a la derecha de la cadena hasta completar la longitud mencionada. Esto nos lleva al siguiente punto.
  2. Varchar requiere menos espacio de almacenamiento que Char, ya que utiliza menos espacio al guardar valores más pequeños. En este punto, hay que tener cuidado con las tablas MyISAM con ROW_FORMAT=FIXED, ya que utiliza una cantidad fija de espacio en disco para cada fila y por tanto desperdicia espacio.
  3. Al ser variable, Varchar necesita utilizar 1 o 2 bytes adicionales para registrar la longitud del valor: 1 byte si la longitud máxima de la columna es 255 bytes o menor y 2 bytes si es más. Entonces, si declaramos un Varchar(255)  utilizará un byte adicional ósea será 256 y si lo declaramos Varchar(1500) en realidad serán 1502 bytes.
  4. Al ahorrar espacio de almacenamiento, se puede deducir a primera vista que Varchar ayuda al rendimiento de una aplicación más que Char, sin embargo, como la longitud de los datos serán variables, sus actualizaciones producirán una tarea adicional a la base de datos. Es por eso que debemos tener en cuenta lo dicho y los siguientes consejos para poder optimizar, en lo que a esto respecta, nuestra BD.

Para graficar lo mencionado en el artículo, tenemos esta tabla que ilustra las diferencias entre los dos tipos de columnas. Char(4) y Varchar(4):

Comparando Char con Varchar
Valor Char(4) Almacenamiento necesario Varchar (4) Almacenamiento necesario
Referencia: Manual de MySQL
'' '    ' 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

Nota: Cuando insertamos un valor mayor al declarado en el tipo, tanto Char como Varchar lo truncan.

¿Cuándo usar Varchar o Char?

En líneas generales, Varchar siempre sale ganando. Por algo es el tipo de cadena más utilizado a la hora de diseñar una BD. Sin embargo, hay que tener en cuenta algunos puntos que pueden ayudarnos a primar Char sobre Varchar:

  1. Char es muy útil para almacenar cadenas muy pequeñas. Por ejemplo, si diseñamos un campo para almacenar caracteres de un byte como “Y” y “N”, Char(1) será más eficiente que Varchar(1).
  2. Char es mejor para almacenar cadenas que tendrán la misma longitud. Por ejemplo, si piensas almacenar las contraseñas de usuarios en MD5, Char supera a Varchar, porque no sufrirá de fragmentación a la hora de actualizar estos campos.
  3. Si la longitud máxima de la columna es muy cercana a la longitud media (códigos, por ejemplo) y es un campo que se actualiza constantemente, también se recomienda usar Char; por el mismo motivo que el punto anterior. Salvo, que utilicemos UTF-8 como conjunto de caracteres, ya que cada carácter UTF-8 utiliza un número variable de bytes de almacenamiento.

Recomendado: 10 tips para Optimizar consultas MySQL

Referencia | manual de mysql

Comentarios

Imagen de antyhony
Imagen de Marcelo S.
Marcelo S.

Interesante tema, tenia clarisimo la primera parte del ahorro, pero no sabia que varchar se fragmentaba y hace mas lento el rendimiento, por ende es recomendable usar CHAR si el campo o columna es clave o muy actualizado.

Saludos y gracias por el aporte!

Imagen de DoctorPC

Tutoriales

Cómo descargar videos de VK.com
En este artículo voy a explicar como descargar videos y películas...
Descargar Facebook Móvil Gratis
Por si aún no lo han hecho, es posible descargar Facebook Móvil...
Cómo generar tráfico web con las redes sociales - Paso a Paso
Muchas empresas están publicando contenidos como la forma de crear...

Artículo Recomendado

3 Tips cruciales para recuperar archivos eliminados
¿Te imaginas perder el trabajo de toda una semana en tan solo unos segundos? Todos hemos pasado por este problema. Quizás eliminamos por error un archivo importante o lo borramos sin pensar que era valioso para otro... más