Tipos de Datos de Mysql

Listado y descripción de los distintos tipos de datos de MySQL.
Después de la fase de diseño de una base de datos, y una vez se ha realizado el paso a tablas del mismo, en necesario crear las tablas correspondientes dentro de la base de datos. Para cada campo de cada una de las tablas, es necesario determinar el tipo de datos que contiene, para de esa forma ajustar el diseño de la base de datos, y conseguir un almacenamiento óptimo con la menor utilización de espacio. El presente artículo describe cada uno de los tipos de datos que puede tener un campo en Mysql, para la versión 4.xx.xx.

Los tipos de datos que puede haber en un campo, se pueden agrupar en tres grandes grupos:
  1. Tipos numéricos

  2. Tipos de Fecha

  3. Tipos de Cadena
1 Tipos numéricos:

Existen tipos de datos numéricos, que se pueden dividir en dos grandes grupos, los que están en coma flotante (con decimales) y los que no.

TinyInt: es un número entero con o sin signo. Con signo el rango de valores válidos va desde -128 a 127. Sin signo, el rango de valores es de 0 a 255

Bit ó Bool: un número entero que puede ser 0 ó 1

SmallInt: número entero con o sin signo. Con signo el rango de valores va desde -32768 a 32767. Sin signo, el rango de valores es de 0 a 65535.

MediumInt: número entero con o sin signo. Con signo el rango de valores va desde -8.388.608 a 8.388.607. Sin signo el rango va desde 0 a16777215.

Integer, Int: número entero con o sin signo. Con signo el rango de valores va desde -2147483648 a 2147483647. Sin signo el rango va desde 0 a 429.4967.295

BigInt: número entero con o sin signo. Con signo el rango de valores va desde -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Sin signo el rango va desde 0 a 18.446.744.073.709.551.615.

Float: número pequeño en coma flotante de precisión simple. Los valores válidos van desde -3.402823466E+38 a -1.175494351E-38, 0 y desde 1.175494351E-38 a 3.402823466E+38.

xReal, Double: número en coma flotante de precisión doble. Los valores permitidos van desde -1.7976931348623157E+308 a -2.2250738585072014E-308, 0 y desde 2.2250738585072014E-308 a 1.7976931348623157E+308

Decimal, Dec, Numeric: Número en coma flotante desempaquetado. El número se almacena como una cadena

Tipo de Campo
Tamaño de Almacenamiento
TINYINT
1 byte
SMALLINT
2 bytes
MEDIUMINT
3 bytes
INT
4 bytes
INTEGER
4 bytes
BIGINT
8 bytes
FLOAT(X)
4 ú 8 bytes
FLOAT
4 bytes
DOUBLE
8 bytes
DOUBLE PRECISION
8 bytes
REAL
8 bytes
DECIMAL(M,D
M+2 bytes sí D > 0, M+1 bytes sí D = 0
NUMERIC(M,D)
M+2 bytes if D > 0, M+1 bytes if D = 0


2 Tipos fecha:

A la hora de almacenar fechas, hay que tener en cuenta que Mysql no comprueba de una manera estricta si una fecha es válida o no. Simplemente comprueba que el mes esta comprendido entre 0 y 12 y que el día esta comprendido entre 0 y 31.
Date: tipo fecha, almacena una fecha. El rango de valores va desde el 1 de enero del 1001 al 31 de diciembre de 9999. El formato de almacenamiento es de año-mes-dia

DateTime: Combinación de fecha y hora. El rango de valores va desde el 1 de enero del 1001 a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y 59 segundos. El formato de almacenamiento es de año-mes-dia horas:minutos:segundos

TimeStamp: Combinación de fecha y hora. El rango va desde el 1 de enero de 1970 al año 2037. El formato de almacenamiento depende del tamaño del campo:

Tamaño
Formato
14
AñoMesDiaHoraMinutoSegundo aaaammddhhmmss
12
AñoMesDiaHoraMinutoSegundo aammddhhmmss
8
ñoMesDia aaaammdd
6
AñoMesDia aammdd
4
AñoMes aamm
2
Año aa


Time: almacena una hora. El rango de horas va desde -838 horas, 59 minutos y 59 segundos a 838, 59 minutos y 59 segundos. El formato de almacenamiento es de 'HH:MM:SS'

Year: almacena un año. El rango de valores permitidos va desde el año 1901 al año 2155. El campo puede tener tamaño dos o tamaño 4 dependiendo de si queremos almacenar el año con dos o cuatro dígitos.

Tipo de Campo
Tamaño de Almacenamiento
DATE
3 bytes
DATETIME
8 bytes
TIMESTAMP
4 bytes
TIME
3 bytes
YEAR
1 byte


3 Tipos de cadena:

Char(n): almacena una cadena de longitud fija. La cadena podrá contener desde 0 a 255 caracteres.

VarChar(n): almacena una cadena de longitud variable. La cadena podrá contener desde 0 a 255 caracteres.

Dentro de los tipos de cadena se pueden distinguir otros dos subtipos, los tipo Test y los tipo BLOB (Binary large Object)

La diferencia entre un tipo y otro es el tratamiento que reciben a la hora de realizar ordenamientos y comparaciones. Mientras que el tipo test se ordena sin tener en cuenta las Mayúsculas y las minúsculas, el tipo BLOB se ordena teniéndolas en cuenta.

Los tipos BLOB se utilizan para almacenar datos binarios como pueden ser ficheros.

TinyText y TinyBlob: Columna con una longitud máxima de 255 caracteres.

Blob y Text: un texto con un máximo de 65535 caracteres.

MediumBlob y MediumText: un texto con un máximo de 16.777.215 caracteres.

LongBlob y LongText: un texto con un máximo de caracteres 4.294.967.295. Hay que tener en cuenta que debido a los protocolos de comunicación los paquetes pueden tener un máximo de 16 Mb.

Enum: campo que puede tener un único valor de una lista que se especifica. El tipo Enum acepta hasta 65535 valores distintos

Set: un campo que puede contener ninguno, uno ó varios valores de una lista. La lista puede tener un máximo de 64 valores.

Tipo de campo
Tamaño de Almacenamiento
CHAR(n)
n bytes
VARCHAR(n)
n +1 bytes
TINYBLOB, TINYTEXT
Longitud+1 bytes
BLOB, TEXT
Longitud +2 bytes
MEDIUMBLOB, MEDIUMTEXT
Longitud +3 bytes
LONGBLOB, LONGTEXT
Longitud +4 bytes
ENUM('value1','value2',...)
1 ó dos bytes dependiendo del número de valores
SET('value1','value2',...)
1, 2, 3, 4 ó 8 bytes, dependiendo del número de valores


Diferencia de almacenamiento entre los tipos Char y VarChar

Valor
CHAR(4)
Almace
namiento
VARCHAR(4)
Almace
namiento
''
''
4 bytes
"
1 byte
'ab'
'ab '
4 bytes
'ab'
3 bytes
'abcd'
'abcd'
4 bytes
'abcd'
 
'abcdefgh'
'abcd'
4 bytes
'abcd'
5 bytes

Compartir

Comentarios

FEr4

14/2/2007
En la descripcion de Integer dice:
Sin signo el rango va desde 0 a
429.4967.295, creo que deberia ser 4.294.967.295

JCP

18/2/2007
quiere decir que el tipo de datos varchar es proporcinal al numero de caracteres que se defina, en otras palabras, se puede gastar menos bytes si almaceno una cadena pequeña o mas si almaceno una cadena grande independientemente de cuanto haya definido el largo de caracteres??

Gabriel

26/4/2007
Hola aquí les dejo algo que aprendi hoy. Como obtener el tamaño de un campo blob de tamaño 0

select * from tabla where LENGTH(campo_blob)=0

Y si quieren saber si el campo es nulo entonces coloquen

select * from tabla where campo_blob is NULL

Roger81r

01/9/2007
ME HA SERVIDO DE MUCHO ESTE ARTICULO ... PERO TENGO UNA DUDA, OJALA PUEDAN AYUDARME... ESTOY CREANDO UNA SECCIÓN DONDE LA GENTE PUEDA ESCRIBIR UN CLASIFICADO Y ESTE SE PUBLIQUE Y SE BORRE ALOS TRES DIAS AUTOMATICAMENTE, PERO DESEO QUE PUEDAN AGREGAR UNA IMAGEN ... 1.- ¿PUEDO ANEXAR UNA IMAGEN A LA BASE DE DATOS Y CON QUE TIPO DE CAMPO?, SINO QUE SERIA LO MAS CONVENIENTE?

el cibernetico

14/2/2008
voy a pasar mi bd.de visual fox a Mysql, pero tengo tablas con campos memos, no he visto campos memo en las definiciones de tablas mysql, ¿hay campos memos en mysql y como se pueden trabajar con ellos, gracias de antemano

betsy

26/2/2008
hola tengo un problema quiero almacenar un texto mayor a 256 caracteres y uso text pero al hacer el insert me dice data truncated podrian decirme por que?
debo poner text(numero) o algo??

ALEX

12/5/2009
Articulo de Mysql
Este es un manual de lo stipos de datos de MySQL

Edison Casanova

19/5/2009
ayudenme porfis
Porfa, les cuento que estoy entrandole a mysql, y necesito me ayuden en dos cosas:
1.- Necesito almacenar una imagen en un campo de mysql, puedo hacerlo? digamen que tipo de dato utilizo para esto.
2.- Puedo crear tipos de datos definidos por el usuario y reglas para enlazarlos entre si?

WILLIAM

20/6/2009
TIPO DE DATO PARA FOTOS
Buenas!!

La presente es para preguntar si existe un tipo de dato en MySQL para introducir imágenes y/o fotos a la base de datos??
Si existe, por favor decirmelo..
Gracias.!!

luis_salinas-452347

23/7/2009
Duda
Mi duda es la siguiente:
Que diferencia hay entre, por ejemplo, un campo int, un int(1) y un int(2) ?
Saludos!

pedroll

27/8/2009
Tipos de Datos de Mysql
muy bueno

Mau

09/9/2009
para más información
Parece que lo sacaste de algún sitio y no pususte la fuente ... pero de todos modos, buen aporte, encontré primero este post :)

Si quieren saber más acerca de este tema: http://www.mysql-hispano.org/page.php?id=22&pag=6 (perdón si infrinjo alguna regla del foro... no las he leído)

Ivan Sanchez

04/1/2010
Útil información
Muchas gracias, la información es de gran utilidad

Mónica Cristina Dominguez

20/2/2010
DUDA: Migrar tipo de datos LongBlob y LongText
Se quiere migrar de DB MYSQL a DB DB2. La aplicación corre con APACHE TOMCAT, lenguaje JAVA y desarrollada con GENEXUS 9.0.
EJEMPLO BURDO: Si en MYSQL el tipo LongBlob/LongText ocupa 4GB , en DB2 ocupa 1MGB de almacenamiento. Tener presente que en los protocolos de comunicación, los paquetes pueden tener un máximo de 16 Mb. CÓMO SE SOLUCIONA ESTO???
Puede ser que la solución esté en usar los DATA VIEW de GENEXUS --> Interfaz entre la DB de GENEXUS y el ambiente externo (con y sin tabla base asociada). O es que al trabajar GENEXUS con otra plataforma, o sea; con otra DB como DB2, existe otra metodología distinta ????
Les agradacería mucho si me pueden ayudar, quedo a la espera de vuestra respuesta ya sea positiva o negativa. TIENE CARACTER DE URGENTE.

juan

30/4/2010
dato para imagen
mi duda cual es el tipo de dato que soporta mysql para imagenes

Jorge alejandro Castaño

28/8/2010
Felicitaciones
se muy poco del tema estoy aprendiendo apenas con el appserver pero tu respeusta es mu concreta sencilla y veraz FELICITACIONES¡¡¡¡¡¡¡¡

Rubén Nicolás

13/10/2011
Y el tipo moneda
Tengo entendido que no hay??

Gracias

Joo!! Soy daltónico no pongais estos chraptras!! jeje

MegaMetalom

07/11/2011
Tipos de datos definidos por el ususario
Un saludo cordial a todos.
Mi pregunta es si existe alguna manera de crear un tipo de dato definido por el usuario basandose en los tipos de datos primitivos y ponerle alguna condicion tal como lo hace SQL
Por ejemplo:

sp_addtype codigo, varchar (4)
create rule codigo_rl as codigo like'[0-9][0-9][0-9][0-9]'

Carlos

18/1/2013
formato fecha
estoy iniciando un sistema que necesita manejar el formado de de fecha dd/mm/aaa como puedo almacenar este formato de fecha en mysql?? Gracias

edwin rolando

08/6/2013
Valores Decimales, flotantes u otros
cuales son los valores que determinan al decimal, como yo se es que si ponemos Decimal(3,2) a este yo le insertaria tres numeros y 2 al final "345.22" y para numeros mayores pienso que es asi Decimal(9,2) 2,742,372.89 o como va con el decimal? lo mismo con el flotante?

Helver Parra

21/2/2014
clase de especifica
me parecio muy importante estos tipos de datos

oscar

01/5/2014
para escojer entre dos tipos de datos M Ó F
espero no averme pasado en leerlo , pero no llego a encontrar en la parte de escojer entre dos tipos de datos , en el caso del genero masculino ó femenino (M/F)