Tipos de Datos en SQL (MySQL)
Este documento detalla los principales tipos de datos en SQL, organizados por categoría, con ejemplos y recomendaciones de uso según eficiencia de almacenamiento y propósito.
1. Tipos Numéricos
| Tipo | Bytes | Descripción | Recomendaciones de uso |
|---|---|---|---|
TINYINT | 1 | Entero muy pequeño (-128 a 127) | Flags booleanos, estados simples |
SMALLINT | 2 | Entero pequeño | Códigos pequeños, contadores de bajo rango |
MEDIUMINT | 3 | Entero medio | IDs intermedios, balances pequeños |
INT o INTEGER | 4 | Entero estándar | Claves primarias, contadores generales |
BIGINT | 8 | Entero grande | Totales acumulados, transacciones, timestamps |
DECIMAL(M,D) | Variable | Número decimal fijo | Datos financieros donde se requiere precisión exacta |
FLOAT | 4 | Coma flotante simple precisión | Métricas aproximadas, cálculos rápidos |
DOUBLE | 8 | Coma flotante doble precisión | Cálculos científicos, estadísticas complejas |
BIT(n) | N | Bitfield de longitud n | Almacenamiento compacto de flags binarios |
2. Tipos de Cadena (String)
| Tipo | Bytes (aprox.) | Descripción | Recomendaciones de uso |
|---|---|---|---|
CHAR(n) | n | Cadena de longitud fija | Códigos uniformes, claves fijas |
VARCHAR(n) | n + 1 | Cadena de longitud variable | Nombres, direcciones, campos editables |
TEXT | Variable | Texto largo hasta 65,535 caracteres | Descripciones, contenido libre |
TINYTEXT | ≤ 255 | Texto pequeño | Comentarios breves, etiquetas |
MEDIUMTEXT | ≤ 16 MB | Texto medio | Artículos, entradas de blog |
LONGTEXT | ≤ 4 GB | Texto muy extenso | Documentos extensos, logs detallados |
ENUM | Variable | Lista definida de valores | Estados limitados, categorías cerradas |
SET | Variable | Conjunto múltiple de valores | Selecciones múltiples entre valores conocidos |
BINARY(n) | n | Datos binarios fijos | Hashes, claves codificadas |
VARBINARY(n) | n + 1 | Datos binarios variables | Archivos, imágenes pequeñas |
3. Tipos de Fecha y Hora
| Tipo | Bytes | Descripción | Recomendaciones de uso |
|---|---|---|---|
DATE | 3 | Fecha (YYYY-MM-DD) | Fecha de nacimiento, eventos |
DATETIME | 8 | Fecha y hora completas | Timestamps humanos, registros de eventos |
TIMESTAMP | 4 | Fecha/hora en formato UNIX (auto-ajuste TZ) | Registros de auditoría, sincronización externa |
TIME | 3 | Hora del día | Horarios, duración específica |
YEAR | 1 | Año (YYYY) | Registro anual, períodos fiscales |
4. Tipos Especiales
| Tipo | Bytes | Descripción | Recomendaciones de uso |
|---|---|---|---|
JSON | Variable | Objeto JSON estructurado | Datos semiestructurados, configuración dinámica |
GEOMETRY | Variable | Coordenadas espaciales | Sistemas GIS, mapas |
POINT, LINESTRING, POLYGON | Variable | Variantes geométricas | Geolocalización, trazados espaciales |
BOOL / BOOLEAN | 1 (alias de TINYINT) | Lógico verdadero/falso | Flags, estados binarios |
5. Recomendaciones Generales
- Eficiencia: Usa
TINYINT,SMALLINToENUMcuando el conjunto de datos es limitado. - Precisión financiera: Prefiere
DECIMALsobreFLOAT/DOUBLEpara evitar errores de redondeo. - Texto largo:
TEXTy sus variantes no son indexables directamente, consideraVARCHARsi necesitas búsquedas. - Timestamps: Usa
TIMESTAMPsi necesitas compatibilidad con zonas horarias;DATETIMEsi quieres evitar el ajuste. - Identificadores: Para claves primarias usa
INT UNSIGNED AUTO_INCREMENTa menos que la cardinalidad lo exija (BIGINT). - Flexibilidad:
JSONes útil en modelos dinámicos pero más costoso en operaciones; evita abusar en bases normalizadas.