Al configurar una base de datos en MySQL, el usuario debe asignar un nombre y un tipo de dato a cada columna de una tabla. Este proceso ayuda al sistema a comprender exactamente qué tipo de información se almacenará y cómo se procesará, además de determinar la cantidad de memoria necesaria.
Existen varias clases principales de tipos de datos en las tablas de MySQL, entre ellas numéricos, de caracteres, de fecha y hora, y otros. Cada clase contiene varios tipos de datos específicos. Es importante definirlos correctamente en la etapa inicial de creación de la tabla para evitar problemas cuando la estructura completa de la base de datos esté finalizada.
Este artículo describe los principales tipos de datos de MySQL, su estructura, valores válidos y el uso recomendado.
MySQL admite todos los tipos de datos numéricos estándar de SQL, utilizados para almacenar números. En este artículo se cubren:
Enteros
Números de punto flotante
Números de punto fijo
Cada uno se describe con más detalle a continuación.
Se utilizan para almacenar números enteros con signo o sin signo. Los tipos con signo pueden almacenar valores positivos y negativos, mientras que los tipos sin signo almacenan solo valores positivos, lo que duplica efectivamente el rango.
Existen cinco tipos principales de enteros: TINYINT, SMALLINT, MEDIUMINT, INT y BIGINT. La principal diferencia es el rango de valores que pueden almacenar: cuanto mayor es el rango, más memoria se requiere. Es importante seleccionar el tipo adecuado para asignar la memoria de forma eficiente al crear tablas.
|
Tipo |
Memoria (bytes) |
Rango con signo |
Rango sin signo |
|
TINYINT |
1 |
−2⁷ a 2⁷−1 |
0 a 2⁸−1 |
|
SMALLINT |
2 |
−2¹⁵ a 2¹⁵−1 |
0 a 2¹⁶−1 |
|
MEDIUMINT |
3 |
−2²³ a 2²³−1 |
0 a 2²⁴−1 |
|
INT |
4 |
−2³¹ a 2³¹−1 |
0 a 2³²−1 |
|
BIGINT |
8 |
−2⁶³ a 2⁶³−1 |
0 a 2⁶⁴−1 |
Especificar un tamaño (por ejemplo, MEDIUMINT(6)) no afecta al rango. Es solo cosmético y algunas herramientas lo utilizan para rellenar números cortos con espacios.
También se puede usar el atributo ZEROFILL para rellenar con ceros en lugar de espacios. Por ejemplo, SMALLINT(8) ZEROFILL mostrará 256 como 00000256.
Se utilizan para almacenar valores numéricos aproximados. MySQL permite definir la precisión de la siguiente forma:
FLOAT(p)
Donde p es la precisión, de 0 a 53.
Si p < 25, se usa FLOAT (precisión simple).
En caso contrario, se usa DOUBLE (precisión doble).
|
Tipo |
Memoria (bytes) |
Rango de valores |
|
FLOAT |
4 |
~±3,4028 × 10³⁸ |
|
DOUBLE |
8 |
~±1,7976 × 10³⁸ |
Se utilizan para almacenar valores exactos con una precisión definida. Se emplean los tipos DECIMAL o NUMERIC, normalmente en cálculos financieros donde el redondeo no es aceptable.
Definición:
DECIMAL(M, D)
M: número total de dígitos (hasta 65; valor predeterminado 10).
D: número de dígitos después del punto decimal (0–30; predeterminado 0).
Ejemplo:
DECIMAL(6, 3)
Almacena valores de -999.999 a 999.999.
DECIMAL y NUMERIC son funcionalmente equivalentes.
Diseñados para almacenar textos cortos, los tipos de datos de caracteres en MySQL incluyen CHAR y VARCHAR. Son similares, pero difieren en la forma en que los datos se almacenan y recuperan.
CHAR almacena una cadena de longitud fija (de 0 a 2⁸−1 caracteres), definida en el momento de crear la tabla. Si se inserta una cadena más corta que la longitud definida, los caracteres restantes se rellenan con espacios.
VARCHAR almacena una cadena de longitud variable (de 0 a 2¹⁶−1 caracteres). A diferencia de CHAR, solo almacena el número real de caracteres y utiliza 1 byte adicional para guardar la longitud de la cadena.
Si la cadena de entrada supera la longitud definida para CHAR o VARCHAR, se trunca para ajustarse al límite permitido.
Si se combinan columnas CHAR y VARCHAR en una tabla, MySQL convertirá automáticamente CHAR a VARCHAR.
|
Cadena |
CHAR(5) |
VARCHAR(5) |
|
'A' |
'A ' |
'A' |
|
'Hello' |
'Hello' |
'Hello' |
|
'Example' |
'Examp' |
'Examp' |
El tipo TEXT se utiliza para almacenar grandes volúmenes de texto, mientras que BLOB está diseñado para datos binarios como imágenes, código compilado o audio.
Diferencias principales:
BLOB: las comparaciones y ordenaciones distinguen entre mayúsculas y minúsculas.
TEXT: las comparaciones y ordenaciones no distinguen entre mayúsculas y minúsculas.
MySQL no puede indexar la longitud completa de campos TEXT o BLOB, ni admite ordenación mediante índices de campo completo.
Si la longitud de la cadena supera el máximo permitido, la entrada se truncará.
|
Tipo |
Memoria (bytes) |
Máx. caracteres |
|
TINYTEXT |
2⁸−1 |
hasta 2⁸−1 |
|
TEXT |
2¹⁶−1 |
hasta 2¹⁶−1 |
|
MEDIUMTEXT |
2²⁴−1 |
hasta 2²⁴−1 |
|
LONGTEXT |
2³²−1 |
hasta 2³²−1 |
|
Tipo |
Memoria (bytes) |
Máx. bytes |
|
TINYBLOB |
2⁸−1 |
hasta 2⁸−1 |
|
BLOB |
2¹⁶−1 |
hasta 2¹⁶−1 |
|
MEDIUMBLOB |
2²⁴−1 |
hasta 2²⁴−1 |
|
LONGBLOB |
2³²−1 |
hasta 2³²−1 |
MySQL proporciona varios tipos de datos para almacenar información de fecha y hora:
|
Tipo |
Memoria (bytes) |
Descripción |
|
DATE |
3 |
Almacena solo la fecha en formato YYYY-MM-DD. |
|
DATETIME |
8 |
Almacena fecha y hora en formato YYYY-MM-DD HH:MM:SS. |
|
TIMESTAMP |
4 |
Similar a DATETIME, pero con menor rango (1970–2038). |
|
TIME |
3 |
Almacena solo la hora, de −838:59:59 a 838:59:59. |
|
YEAR |
1 |
Almacena solo el año en formato YYYY. |
MySQL admite un tipo de dato JSON nativo desde la versión 5.7.8, que ofrece las siguientes ventajas:
Validación automática de datos JSON.
Formato de almacenamiento binario optimizado para un acceso y consultas más rápidas.
El uso de memoria es aproximadamente equivalente a LONGTEXT.
MySQL ofrece tipos de datos de cadena especiales que almacenan valores de un conjunto fijo predefinido: ENUM y SET.
ENUM almacena un solo valor de la lista y utiliza hasta 2 bytes de memoria.
SET puede almacenar hasta 26 valores simultáneamente y utiliza hasta 8 bytes de memoria.
ENUM('a', 's', 'd')
La columna solo puede contener uno de los siguientes valores: 'a', 's' o 'd'.
SET('a', 's', 'd')
La columna puede contener cualquier combinación, incluyendo:'a', 's', 'd', 'a,s', 'a,d', 's,d', 'a,s,d' o el conjunto vacío ('').
Si se inserta un valor como ('a', 's', 'a') en un SET, MySQL elimina automáticamente los duplicados y los ordena según el orden original de declaración. El valor almacenado será 'a,s'.
Este artículo cubrió los tipos de datos de MySQL más utilizados para definir columnas de tablas. Con este conocimiento, los usuarios pueden seleccionar los tipos adecuados y diseñar de forma eficiente la estructura de sus bases de datos. Para tipos menos comunes y más detallados, se recomienda consultar la documentación oficial de MySQL.
Puedes utilizar bases de datos en la nube de Hostman para practicar con MySQL y sus distintos tipos de datos. Las principales ventajas de usar MySQL en la nube incluyen:
Mantenimiento y configuración de la base de datos por parte del proveedor.
Alta fiabilidad, disponibilidad y tolerancia a fallos.
Copias de seguridad automáticas.
Escalado horizontal y vertical rápido.
Funcionamiento continuo mediante replicación en clúster.
Ejecución de bases de datos sobre recursos de una plataforma en la nube.