Cuando declaras una columna alfanumérica, puedes elegir entre CHAR y VARCHAR. Los tipos de datos de caracteres son de tamaño fijo (char) o de tamaño variable (varchar). La diferencia principal es que CHAR tiene longitud fija y VARCHAR tiene longitud variable. Una idea equivocada habitual es pensar que, en char(n) y varchar(n), la n define el número de caracteres. Sin embargo, en char(n) y varchar(n), la n define la longitud de la cadena en bytes.
Características de CHAR
Cuando usamos CHAR, decimos que la memoria será reservada para la cantidad de bytes que estamos definiendo. Es un campo de longitud fija; siempre ocupará la longitud definida, los llenemos de datos o no. Si declaramos un CHAR de longitud 20 y guardamos un “Hola”, solo se ocuparán 4 bytes y los otros 16 se llenarán con espacios. Aunque CHAR(10) almacena 10 bytes internamente, el motor de base de datos elimina los espacios finales al leer.
Debido a que se sabe de antemano cuál es la longitud de los datos, CHAR es más rápido que VARCHAR en cuanto a rendimiento. No obstante, al usar CHAR, puedes tener problemas por los espacios a la hora de realizar filtros. Si buscas con WHERE campo = 'algo', es posible que no lo encuentre porque faltarán los espacios de relleno (leading spaces).
Características de VARCHAR
Al declarar un tipo de dato como VARCHAR, estamos indicando que será de longitud variable. Esto significa que solo reservará memoria para los datos que pongamos; aunque declaremos un VARCHAR de 1000 y pongamos un “hola”, solo guardará los caracteres necesarios. En realidad, a veces VARCHAR va a necesitar algunos bytes de más para guardar la longitud de los datos, ya que, aparte de los datos, guarda un prefijo que indica la longitud.
Es importante notar que cada columna varchar(max) o nvarchar(max) cuyo valor no sea NULL requiere 24 bytes de asignación fija adicional. En comparación con CHAR, VARCHAR es más eficiente en cuanto a espacio de almacenamiento cuando los datos tienen longitudes muy dispares.
Lea también: Aprende a trabajar con cadenas de texto en C
Tabla comparativa: CHAR vs VARCHAR
| Característica | CHAR | VARCHAR |
|---|---|---|
| Longitud | Fija | Variable |
| Almacenamiento | Ocupa siempre n bytes | Ocupa el espacio real + prefijo |
| Rendimiento | Más rápido | Dependiente de la longitud |
| Uso ideal | Datos de longitud constante | Datos de longitud variable |
¿Cuándo utilizar cada uno?
Si vamos a almacenar datos cuyo tamaño sabemos de antemano, es mejor usar CHAR, pues acelera el rendimiento. Por ejemplo, es perfecto para guardar el sexo (‘F’, ‘M’), códigos de Estado (‘AK’, ‘AZ’, ‘NY’), códigos de moneda o hashes MD5 que siempre tienen una longitud de 32.
En caso de que vayamos a almacenar datos de longitud variable que pueden ser más cortos que el límite, usamos VARCHAR. Por ejemplo, si vamos a hacer una aplicación que guarde nombres de personas o direcciones, es más eficiente utilizar VARCHAR, ya que no llena de espacios el resto del campo. Esos 2 bytes que se ahorran al declarar una columna como CHAR, en esta época y con los discos duros gigantescos disponibles, pueden ser irrelevantes y no degradarán el rendimiento de la base de datos.
Recuerda que, a partir de SQL Server 2019, cuando se usa una intercalación habilitada para UTF-8, estos tipos de datos almacenan el intervalo completo de datos de caracteres Unicode. Ten cuidado al definir la longitud basándote en los datos reales y no en un número arbitrario, y no utilices VARCHAR(255) para todo por inercia.
Lea también: Aprende a controlar la entrada de datos en JTextField
Lea también: Proceso de Compensación IVA
