Ir al contenido principal

Tipos de datos

¿Qué son los tipos de datos?

El tipo de dato es la clase de valor que puede guardarse en un campo. Es la primera decisión que se toma al crear una tabla, porque define qué se puede escribir ahí y qué no.

El tipo cumple tres funciones a la vez, y las tres importan:

  • Controla lo que se acepta. Un campo definido como número entero rechaza el texto. Es la primera barrera contra los datos mal cargados.
  • Define qué operaciones tienen sentido. Con fechas se puede calcular una diferencia de días; con texto, no. Con números se puede sumar y promediar.
  • Decide cuánto espacio ocupa. Un entero pequeño ocupa un byte; uno grande, ocho. Multiplicado por millones de filas, la diferencia se nota en disco y en velocidad.

Elegir mal un tipo no siempre da error enseguida. Muchas veces funciona igual durante meses y el problema aparece cuando hay que ordenar, comparar o calcular algo, y resulta que el dato se guardó como texto.

Numéricos

Se dividen en dos grupos con comportamientos muy distintos: los enteros y los decimales.

Enteros

Guardan números sin parte decimal, y se diferencian por el rango que abarcan: a mayor rango, más espacio ocupa cada valor.

Tipo Espacio Para qué alcanza
TINYINT1 byteValores de 0 a 255. Ideal para edades, cantidades chicas o para representar sí y no.
SMALLINT2 bytesHasta unos 65.000. Años, cantidades medianas.
MEDIUMINT3 bytesHasta unos 16 millones.
INT o INTEGER4 bytesHasta unos 4.300 millones. Es el entero que se usa por defecto, y alcanza para casi todo.
BIGINT8 bytesNúmeros gigantes. Se usa en identificadores de sistemas muy grandes.

Decimales

Acá está la distinción más importante de toda la sección, y una de las que más errores causa en la práctica:

Tipo Cómo guarda el número Se usa para
FLOAT y DOUBLE De forma aproximada, con una cantidad limitada de dígitos significativos. Cálculos científicos, medidas, gráficos. Donde un error minúsculo no importa.
DECIMAL o NUMERIC De forma exacta: guarda los dígitos tal como se escriben. Todo lo que tenga que ver con dinero y con valores contables.

Texto

Se diferencian por dos cosas: si la longitud es fija o variable, y cuánto texto pueden guardar.

Tipo Longitud Dónde conviene
CHAR(n) Fija: siempre ocupa n caracteres, aunque se escriba menos. Datos de longitud constante y conocida: un código de dos letras, un documento de longitud fija.
VARCHAR(n) Variable: ocupa solo lo que se escribe, hasta un máximo de n. Casi todo: nombres, direcciones, correos, títulos.
TEXT y variantes Textos extensos, sin una longitud declarada de antemano. Descripciones largas, observaciones, contenido de un artículo.

La diferencia entre CHAR y VARCHAR tiene una consecuencia concreta: CHAR(50) siempre ocupa 50, aunque se escriba "Ana" —el resto se rellena con espacios—, mientras que VARCHAR(50) con "Ana" ocupa 3. Por eso VARCHAR es la opción habitual: ahorra espacio y no obliga a adivinar la longitud exacta.

Fecha y hora

Son tipos propios, y no texto: guardarlos como texto es un error frecuente que impide ordenar cronológicamente y calcular diferencias.

Tipo Qué guarda Formato
DATEUna fecha.AAAA-MM-DD
TIMEUna hora.HH:MM:SS
DATETIMEFecha y hora juntas.AAAA-MM-DD HH:MM:SS
TIMESTAMPUna marca de tiempo, que el sistema puede actualizar solo.AAAA-MM-DD HH:MM:SS
YEARUn año, en cuatro cifras.AAAA

Hay dos cosas que conviene saber de estos tipos. La primera: el formato que se muestra no es el que se guarda. Internamente la fecha es un número; que se vea como AAAA-MM-DD es solo la forma de mostrarla, y se puede cambiar sin tocar los datos. La segunda: TIMESTAMP se usa para auditoría —saber cuándo se creó o se modificó una fila— porque el gestor puede completarlo solo en cada operación, sin que el programa tenga que acordarse.

Booleanos

Un booleano solo puede tomar dos valores: verdadero o falso. Es el tipo de los estados de sí o no: si un libro está disponible, si un alumno está activo, si un pedido ya se entregó.

Conviene saber que no todos los gestores tienen un tipo booleano de verdad. MySQL, por ejemplo, acepta la palabra BOOLEAN pero internamente lo guarda como un entero de un byte, donde 0 es falso y 1 es verdadero. Funciona igual, pero explica por qué a veces los resultados de una consulta muestran 0 y 1 en lugar de false y true.

Binarios

Los tipos binarios permiten guardar datos que no son texto: imágenes, audios, archivos comprimidos, documentos. El principal es BLOB (Binary Large Object), con variantes según el tamaño que admiten.

Cómo elegir un tipo de dato

La elección de un tipo no es un trámite: cada decisión tiene consecuencias sobre el espacio, la velocidad y la posibilidad de cometer errores.

Pregunta Por qué importa
¿Qué se va a guardar exactamente? Un documento con letras y números se guarda como texto aunque parezca un número. Una fecha no se guarda nunca como texto.
¿Va a hacer falta calcular con ese dato? Si hay que sumar, promediar u ordenar, tiene que ser un tipo numérico. Si es para mostrar, el texto alcanza.
¿Tiene que ser exacto? Todo lo que sea dinero va con DECIMAL, sin excepción.
¿Cuál es la longitud máxima realista? Poner un límite razonable en los textos evita que alguien cargue un párrafo donde va un nombre.
¿Cuántas filas va a tener la tabla? Con miles de filas el espacio no importa. Con millones, elegir un entero más chico o un límite más ajustado en los textos ahorra mucho disco.

Y un criterio práctico que resume todo: el tipo más chico que cubra lo que se necesita. No hace falta reservar espacio "por las dudas"; si el dato crece, ampliar el tipo más adelante es una operación simple.

Resumen

Grupo La idea que hay que recordar
EnterosSe diferencian por el rango. INT alcanza para casi todo.
DecimalesFLOAT es aproximado; DECIMAL es exacto. El dinero siempre va con DECIMAL.
TextoCHAR ocupa siempre lo mismo; VARCHAR ocupa lo que se escribe.
Fecha y horaSon tipos propios, nunca texto. TIMESTAMP sirve para auditoría.
BooleanosDos valores. En varios gestores se guardan como un entero de 0 y 1.
BinariosPara archivos. Casi siempre conviene guardar la ruta y no el archivo.
Cómo elegirEl tipo más chico que cubra lo que se necesita, y exacto cuando hay que serlo.