Tipos de columnas en MySQL
De cara al usuario avanzado que quiere seguir estudiando la creación de páginas Web dinámicas, incluyo este anexo, en el que profundizamos en los diferentes tipos de datos que pueden almacenarse en una base de datos MySQL, y en los diferentes tipos de columnas que podemos crear para hacer el almacenamiento más efectivo.
Dado que muchas de estas columnas pueden tener parámetros opcionales, estableceremos una serie de convenciones a la hora de explicar las diferentes columnas.
Parámetros
M.Este parámetro se utiliza para indicar el número máximo de caracteres que pueden tener los valores que incluyamos en esta columna. M puede ser cualquier número entero entre 1 y 255. El almacenamiento de un número de caracteres mayor, indefectiblemente, nos acabará causando problemas, sobre todo cuando las relaciones entre las distintas bases de datos sean más complejas.
D.Este parámetro nos permite espeficicar cuántos números decimales pueden ser almacenados en valores de punto flotante. El máximo valor de este es 30, siempre y cuando el parámetro M nos lo permita.
Atributos
ZEROFILL. Esta opción consigue que la columna siempre ocupe su máxima longitud, dado que en el caso de que no le asignemos ningún valor, el sistema automáticamente lo completará con ceros. De esta manera nos aseguramos de que en una búsqueda siempre encontramos un valor, aunque sea cero. Al activar esta opción, automáticamente se activa la opción UNSIGNED.
UNSIGNED. Esta opción consigue que la columna sólo acepte valores positivos, o cero. Hayque tener precaución y, antes de activarla, tener completamente seguro que no queremos aceptar valores negativos.
BINARY. Por defecto, los caracteres de comparación en MySQL no distinguen entre mayúsculas y minúsculas. Sin embargo, los caracteres de comparación en columnas BINARY sí admiten mayúsculas y minúsculas.
Valores numéricos
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
Descripción: diminuto valore entero.
Rango: de -128 a127 (o de 0 a 255, si activamos la función UNSIGNED).
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
Descripción: diminuto valor entero.
Rango: de -32768 a 32767 (0 a 65535, si activamos la función UNSIGNED).
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
Descripción: entero de tamaño medio.
Rango: de -8388608 a 8388607 (0 a 16777215, si activamos la función UNSIGNED).
INT[(M)] [UNSIGNED] [ZEROFILL]
Descripción: entero de tamaño normal.
Rango: de -2147483648 a 2147483647. (0 a 4294967295, si activamos la función UNSIGNED).
INTEGER[(M)] [UNSIGNED] [ZEROFILL]
Descripción: es un sinónimo de INT.
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
Descripción: número entero de gran tamaño.
Rango: de -9223372036854775808 a 9223372036854775807. (0 a 18446744073709551615, si activamos la función UNSIGNED).
FLOAT(precision) [UNSIGNED] [ZEROFILL]
Descripción: número de punto flotante.
Rango: de 0 a +/- 1.175494351E - 38 +/- 3.402823466E+38.
Nota: si especificamos el parámetro precision (en bits), debe ser menor o igual a 24, pues de otra manera se creará una columna DOUBLE.
DOBLE[(M,D)] [UNSIGNED] [ZEROFILL]
Descripción: número de punto flotante de gran precisión.
Rango: de 1.7976931348623157E+308 a -2.2250738585072014E-308, 0, y de
2.2250738585072014E-308 hasta 1.7976931348623157E+308.
Nota: La precisión (en bits), si se especifica, debe ser mayor o igual a 25; o si no, se creará una columna FLOAT. El valor de precisión no debe ser mayor a 53. También se puede definir como DOUBLE PRECISION[(M,D)] o REAL([M,D]).
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
Descripción: un número de punto flotante que puede almacenarse como una cadena de texto.
Rango: como para DOUBLE, pero atendiéndose a los parámetros M y D.
Nota: Si no especificamos el valor de D, por defecto, será igual a cero, y los números en esta columna no tendrán parte decimal. Si no especificamos el valor de M, su valore será igual a 10.
DEC[(M[,D])] [UNSIGNED] [ZEROFILL]
Descripción: idéntico al decimal.
NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL]
Descripción: idéntico al decimal.
Valores de fecha y tiempo
DATE
Descripción: una fecha.
Rango: de '1000-01-01' hasta '9999-12-31'.
Nota: El valor en que las fechas son almacenadas en las tablas MySQL corresponde a 'aaaa-mm-dd' (año-mes-día).
DATETIME
Descripción: combinación de fecha y hora.
Rango: de '1000-01-01 00:00:00' hasta '9999-12-31 23:59:59'
Nota: El valor en que las fechas son almacenadas en las tablas MySQL corresponde a 'AAAA-MM-DD HH:MM:SS'
TIMESTAMP[(M)]
Descripción: almacena la fecha y hora en un momento determinado.
Rango: desde '1970-01-01 00:00:00' o algún otro momento en el año 2037.
Nota: Una columna con formato TIMESTAMP tiene gran utilidad para almacenar la fecha y ora de una operación de INSERT o UPDATE porque, automáticamente, fija la fecha y hora de la operación más reciente si no le damos un valor nosotros mismos. También podemos fijar la fecha y hora actual, asignándole un valor NULL.
TIME
Descripción: una hora.
Rango: desde '-838:59:59' hasta '838:59:59'.
Nota: El valor en que las horas son almacenadas en las tablas MySQL corresponde a 'HH:MM:SS'.
YEAR[(2|4)]
Descripción: un año, en versión de dos o cuatro dígitos (el valor por defecto es cuatro).
Rango: desde 1901 hasta 2155 en versión de cuatro dígitos, y desde 1970 hasta 2069 en versión de dos dígitos.
Valores de caracter
CHAR(M) [BINARY]
Descripción: una cadena de caracteres de longitud fija.
Longitud máxima: M caracteres.
Nota: Las cadenas de caracteres son almacenador hasta la longitud máxima indicada de M (0 a 255 caracteres). Los espacios internmedios son eliminados cuando se supera este valor. Asimismo, si no ocupamos el valor completo de M, automáticamente se almacenarán espacios al final de la cadena de texto hasta completar la longitud.
VARCHAR(M) [BINARY]
Descripción: una cadena de caracteres de longitud variable.
Logitud máxima: M caracteres.
Nota: Los espacios al principio y al final de la cadena de texto son elimindados a la hora de almacenamiento. Dado que es una cadena de
longitud variable, no es necesario consumir el máximo espacio permitido.
TINYBLOB
TINYTEXT
Descripción: una pequeña cadena de texto de longitud variable.
Longitud máxima: 255 caracteres.
Nota: Muy similar a VARCHAR; sin embargo, en este caso se borran los caracteres del principio y del final de las líneas.
BLOB
TEXT
Descripción: una cadena de texto de longitud variable.
Logitud máxima: 65535 caracteres.
MEDIUMBLOB
MEDIUMTEXT
Descripción: una cadena de texto de tamaño medio y longitud variable.
Longitud máxima: 16777215 caracteres.
LONGBLOB
LONGTEXT
Descripción: una cadena de texto de gran tamaño y longitud variable.
Longitud máxima: 4294967295 caracteres.
ENUM('valor1','valor2', ...)
Descripción: una enumeración de valores de los cuales uno ha de ser escogido de cada fila.
Longitud máxima: puede contener hasta un total de 65535 valores distintos.
Nota: Los valores en este tipo de campos son almacenados como números enteros que representan el elemento seleccionado. 1 representa el primer elemento; 2, el segundo; y asi sucesivamente. El valor 0 representa una cadena vacía, es decir, que no seleccionamos ninguno de los valores que se nos ofrecen.
SET('valor1','valor2',...)
Descripción: un conjunto de valores, cada uno de los cuales puede ser seleccionado o no.
Longitud máxima: podemos dar hasta 64 valores para seleccionar.










