Tipo de datos MySQL

MySQL admite varios tipos de datos en varias categorías: numéricos, cadenas (caracteres y bytes), fecha y hora, espaciales y el tipo de datos JSON. Este capítulo proporciona una descripción resumida de estos tipos de datos.

1. Numérico

Por defecto los números están firmados. Se puede poner UNSIGNED (nofirmado) si se quiere entender su rango a solo positivos. El ancho en () indica el ancho máximo de visualización. El ancho máximo de pantalla es 255.

Datos numéricos
NombreBytesDescripción
BIT1Valores entre 1 y 64.
TINYINT1Valores entre 0 y 155 o -128 a 127.
SMALLINT2Valores entre 0 y 65,535 o -32,768 a 32,767
MEDIUMINT3Valores entre 0 y 16'777,215 o -8'388,608 a 8'388,607
INT4Valores entre 0 y 4294'967,295 o -2147483648 a 2147583647
BIGINT8Valores entre 0 y 18446744073709551615
FLOAT8Numero flotante con precisión sencilla
DOUBLE4Numero flotante con precisión doble
DECIMALNumero flotante que se almacena como caracteres.

Cuando se crea un campo hay una columna opcional que indica Longitud/valor que en el caso de todos los tipos numéricos indica el "ancho de visualización". Por ejemplo, INT(4) especifica que el tipo INT con un ancho de visualización de cuatro dígitos. Las aplicaciones pueden usar este ancho de visualización opcional para mostrar los valores enteros que tienen un ancho menor que el ancho especificado para la columna al rellenarlos con espacios. Esto no ahorra en nada el espacio separado que en el casos del INT siempre sera 4 bytes.

2. Cadena

Datos caracteres
NombreTamañoDescripción
VARCHARMVariable en longitud. M<=255
TINYTEXTHasta 255No es sensible a mayúsculas/minúsculas
TEXTHasta 64 KNo es sensible a mayúsculas/minúsculas
MEDIUMTEXTHasta 16 MNo es sensible a mayúsculas/minúsculas
LONGTEXTHasta 4GNo es sensible a mayúsculas/minúsculas

3. Fecha

Datos fecha
NombreTamañoDescripción
DATE3En el formato AAAA-MM-DD
DATETIME8En el formato AAA-MM-DD HH:MM:SS
TIMESTAMP8En el formato AAA-MM-DD HH:MM:SS
TIME3En formato HHH:MM:SS donde HHH esta entre -838 y 838
YEAR1En formato AAAA entre los años 1901 y 2155

Si solo ingresa 2 dígitos como años tenga en cuenta que 70~99 se refiere a 1970~1999 y que 00~69 se refiere a 2000~2069. MySQL permite poner 0 en el dia y mes, esto facilita ingresar fechas de nacimiento desconocidas como 2018-00-00 o 2018-07-00. Puede usar las funciones DATE_FORMAT(), DATE_ADD() y DATE_SUB()

4. Otros

Datos otros
NombreTamañoDescripción
BINARYMAlmacena cadenas de bytes
TINYBLOBHasta 255En el formato AAA-MM-DD HH:MM:SS
BLOBHasta 64 KEs sensible a mayúsculas y minúsculas
MEDIUMBLOBHasta 16 MEs sensible a mayúsculas y minúsculas
LONGBLOBHasta 4 GEs sensible a mayúsculas y minúsculas
JSONHasta 4 GDesde MySQL 5.7.8 se admite JSON nativo

5. Geoespaciales

Siguiendo la especificación Open Geospatial Consortium (OGC), MySQL implementa extensiones espaciales como un subconjunto del entorno SQL con tipos de geometría. Este término se refiere a un entorno SQL que se ha extendido con un conjunto de tipos de geometría. Un campo con valores geométricos se implementa como una columna que tiene un tipo de geometría. Permiten la generación, almacenamiento y análisis de características geográfica.