3.2. Tipos de datos

3.2. Tipos de datos Dataprix 6 Octubre, 2009 - 10:31

MySQL cuenta con un rico conjunto de tipos de datos para las columnas, que es necesario conocer para elegir mejor cómo definir las tablas. Los tipos de datos se pueden clasificar en tres grupos:

•    Numéricos.   
•    Cadenas de caracteres
•    Fechas y horas

El valor null es un caso especial de dato, ya que al significar ausencia de valor se aplica a todos los tipos de columna. Los siguientes símbolos se utilizan en la definición y descripción de los tipos de datos en MySQL:

•    M - El ancho de la columna en número de caracteres.
•    D - Número de decimales que hay que mostrar.
•    L - Longitud o tamaño real de una cadena.
•    [ ] - Lo que se escriba entre ellos es opcional.

3.2.1. Tipos de datos numericos

3.2.1. Tipos de datos numericos Dataprix 6 Octubre, 2009 - 10:44

Los tipos de datos numéricos comprenden dos categorías, los enteros y los números con punto flotante.

Números enteros

La principal diferencia entre cada uno de los tipos de enteros es su tamaño, que va desde 1 byte de almacenamiento hasta los 8 bytes. Las columnas de tipo en- tero pueden recibir dos atributos adicionales, que deben especificarse inmediatamente después del nombre del tipo:

•    unsigned. Indica que el entero no podrá almacenar valores negativos. Es responsabilidad del usuario verificar, en este caso, que los resultados de las restas no sean negativos, porque MySQL los convierte en positivos.

•    zerofill. Indica que la columna, al ser mostrada, rellenará con ceros a la iz- quierda los espacios vacíos. Esto de acuerdo al valor especificado por M en la declaración del tipo. Una columna con el atributo zerofill es al mismo tiempo unsigned aunque no se especifique.

 

Ejemplo

create table números (
x int(4) zerofill not null,
y int(5) unsigned
);

El comando anterior crea una tabla con dos columnas. Ambas ocuparán un espacio de 4 bytes, pero al mostrarse, la columna x ocupará un espacio de 4 dígitos y la columna y, de 5.

 

Tanto zerofill como unsigned deben escribirse siempre antes que cualquier otro atributo de columna.

 

Tipos enteros

Tipo Espacio de almacenamiento Significado
tinyint[(M)] 1 byte Entero muy pequeño
smallint[(M)] 2 bytes Entero pequeño
mediumint[(M)] 3 bytes Entero mediano
int[(M)] 4 bytes Entero
bigint[(M)] 8 bytes Entero grande

Números con punto flotante

MySQL cuenta con los tipos float y double, de 4 y 8 bytes de almacenamiento. Además incluye el tipo decimal, que se almacena como una cadena de carac- teres y no en formato binario.

 

Números de punto flotante

Tipo Espacio de almacenamiento Significado
float 4 bytes Simple precisión
double 8 bytes Doble precisión
decimal M + 2 bytes Cadena de caracteres representando un número flotante

3.2.2. Cadenas de caracteres

3.2.2. Cadenas de caracteres Dataprix 6 Octubre, 2009 - 11:01

Cadenas de caracteres

Tipo Equivalente Tamaño máximo Espacio de almacenamiento
 char[(M)]  M bytes  M bytes
 varchar[(M)]  M bytes  L+1 bytes
 tinytext  tinyblob  28-1 bytes  L+1 bytes
 text  blob  216-1 bytes  L+2 bytes
 mediumtext  mediumblob  224-1 bytes  L+3 bytes
 longtext  longblob  232 -1 bytes  L+4 bytes
 enum('v1','v2',...)  65535 valores  1 o 2 bytes
 set('v1','v2',...)  64 valores  1 a 8 bytes

Si observamos la tabla, vemos que el único tipo de dato que siempre utiliza el tamaño especificado por M es el tipo char. Por este motivo, se ofrece el tipo varchar que ocupa sólo el espacio requerido por el valor de la columna.

Ejemplo

create table persona(
comentario char(250),
recado varchar(250)
);

La columna comentario ocupará 250 bytes de espacio de almacenamiento, sin importar el valor almacenado. Por el contrario, la columna recado ocupará sólo el espacio necesario según el valor asignado; por ejemplo, la cadena “Instalar MySQL” tiene 14 bytes de longitud, y el campo recado ocuparía 15 bytes para almacenarla.

Los tipos text y blob son equivalentes, pero text respeta las mayúsculas, mi- núsculas y caracteres acentuados en la ordenación.

Ejemplo del uso de los tipos enumerados o enum

create table persona(
edo_civil enum(’soltero’,’casado’,’viudo’,’divorciado’)
);

La columna edo_civil de la tabla en la sentencia anterior, solo podrá almacenar los valores ’soltero’, ’casado’, ’viudo’, ’divorciado’, que son especificados por el tipo enum. La columna ocupará el espacio de un byte, ya que los valores enum son representados internamente por números.

3.2.3. Fechas y horas

3.2.3. Fechas y horas Dataprix 6 Octubre, 2009 - 11:16

Fechas y horas

Tipo Espacio de almacenamiento Rango
 date  3 bytes  '1000-01-01' al ' 9999-12-31'
time 3 bytes  ' -838:59:59' a ' 838:59:59'
datetime 8 bytes  ' 1000-01-01-00:00:00'a ' 9999-12-31 23:59:59'
timestamp[(M)] 4 bytes  19700101000000 al año 2037
year[(M)] 1 bytes  1901 a 2155