Tipos de datos MySQL
En MySQL, definir los tipos de los campos de datos es muy importante para la optimización de tu base de datos.
MySQL admite muchos tipos, que se pueden dividir aproximadamente en tres categorías: numéricos, fecha/hora y tipos de cadena (caracteres).
Tipos numéricos
MySQL admite todos los tipos de datos numéricos estándar de SQL.
Estos tipos incluyen tipos de datos numéricos estrictos (INTEGER, SMALLINT, DECIMAL y NUMERIC), así como tipos de datos numéricos aproximados (FLOAT, REAL y DOUBLE PRECISION).
La palabra clave INT es sinónimo de INTEGER, y la palabra clave DEC es sinónimo de DECIMAL.
El tipo de datos BIT almacena valores de campos de bits y es compatible con las tablas MyISAM, MEMORY, InnoDB y BDB.
Como extensión del estándar SQL, MySQL también admite los tipos enteros TINYINT, MEDIUMINT y BIGINT. La siguiente tabla muestra el almacenamiento y el rango requeridos para cada tipo entero.
| Tipo | Tamaño | Rango (con signo) | Rango (sin signo) | Uso |
|---|---|---|---|---|
| TINYINT | 1 Bytes | (-128,127) | (0,255) | Valor entero pequeño |
| SMALLINT | 2 Bytes | (-32 768,32 767) | (0,65 535) | Valor entero grande |
| MEDIUMINT | 3 Bytes | (-8 388 608,8 388 607) | (0,16 777 215) | Valor entero grande |
| INT o INTEGER | 4 Bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | Valor entero grande |
| BIGINT | 8 Bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | Valor entero muy grande |
| FLOAT | 4 Bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | Precisión simple Valor de punto flotante |
| DOUBLE | 8 Bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | Doble precisión Valor de punto flotante |
| DECIMAL | Para DECIMAL(M,D), si M>D, es M+2, de lo contrario D+2. | Depende de los valores de M y D | Depende de los valores de M y D | Valor decimal |
Tipos de fecha y hora
Los tipos de fecha y hora que representan valores de tiempo son DATETIME, DATE, TIMESTAMP, TIME y YEAR.
Cada tipo de tiempo tiene un rango de valores válidos y un valor "cero", que se utiliza cuando se especifica un valor ilegal que MySQL no puede representar.
El tipo TIMESTAMP tiene una característica exclusiva de actualización automática, que se describirá más adelante.
| Tipo | Tamaño ( bytes) |
Rango | Formato | Uso |
|---|---|---|---|---|
| DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | Valor de fecha |
| TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | Valor de hora o duración |
| YEAR | 1 | 1901/2155 | YYYY | Valor de año |
| DATETIME | 8 | De '1000-01-01 00:00:00' a '9999-12-31 23:59:59' | YYYY-MM-DD hh:mm:ss | Valor mixto de fecha y hora |
| TIMESTAMP | 4 |
De '1970-01-01 00:00:01' UTC a '2038-01-19 03:14:07' UTC El tiempo de finalización es el2147483647segundos, hora de Pekín2038-1-19 11:14:07, hora del meridiano de Greenwich, 03:14:07 de la madrugada del 19 de enero de 2038 |
YYYY-MM-DD hh:mm:ss | Valor mixto de fecha y hora, marca de tiempo |
Tipos de cadena
Los tipos de cadena se refieren a CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM y SET. Esta sección describe cómo funcionan estos tipos y cómo usarlos en las consultas.
| Tipo | Tamaño | Uso |
|---|---|---|
| CHAR | 0-255 bytes | Cadena de longitud fija |
| VARCHAR | 0-65535 bytes | Cadena de longitud variable |
| TINYBLOB | 0-255 bytes | Cadena binaria de no más de 255 caracteres |
| TINYTEXT | 0-255 bytes | Cadena de texto corta |
| BLOB | 0-65 535 bytes | Datos de texto largo en forma binaria |
| TEXT | 0-65 535 bytes | Datos de texto largo |
| MEDIUMBLOB | 0-16 777 215 bytes | Datos de texto de longitud media en forma binaria |
| MEDIUMTEXT | 0-16 777 215 bytes | Datos de texto de longitud media |
| LONGBLOB | 0-4 294 967 295 bytes | Datos de texto muy grandes en forma binaria |
| LONGTEXT | 0-4 294 967 295 bytes | Datos de texto muy grandes |
Nota: en char(n) y varchar(n), la n entre paréntesis representa el número de caracteres, no el número de bytes. Por ejemplo, CHAR(30) puede almacenar 30 caracteres.
Los tipos CHAR y VARCHAR son similares, pero se guardan y recuperan de manera diferente. También difieren en su longitud máxima y en si se conservan los espacios finales. No se realiza conversión de mayúsculas/minúsculas durante el almacenamiento o la recuperación.
BINARY y VARBINARY son similares a CHAR y VARCHAR, excepto que contienen cadenas binarias y no cadenas no binarias. Es decir, contienen cadenas de bytes en lugar de cadenas de caracteres. Esto significa que no tienen conjunto de caracteres, y la clasificación y comparación se basan en los valores numéricos de los bytes de los valores de la columna.
BLOB es un objeto binario grande que puede contener una cantidad variable de datos. Hay 4 tipos BLOB: TINYBLOB, BLOB, MEDIUMBLOB y LONGBLOB. Se diferencian en el rango de almacenamiento que pueden contener.
Hay 4 tipos TEXT: TINYTEXT, TEXT, MEDIUMTEXT y LONGTEXT. Corresponden a los 4 tipos BLOB, pero con diferentes longitudes máximas de almacenamiento; se pueden elegir según la situación real.
Tipos de enumeración y conjunto (Enumeration and Set Types)
- ENUM: Tipo de enumeración, se utiliza para almacenar un único valor; se puede elegir un conjunto predefinido.
- SET: Tipo de conjunto, se utiliza para almacenar múltiples valores; se pueden elegir múltiples conjuntos predefinidos.
Tipos de datos espaciales (Spatial Data Types)
GEOMETRY, POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION: se utilizan para almacenar datos espaciales (información geográfica, figuras geométricas, etc.).
Otras extensiones