Tabla de contenidos
MySQL soporta un número de tipos de columnas divididos en varias categorías: tipos númericos, tipos de fecha y hora, y tipos de cadenas de carácteres. Este capítulo primero hace un repaso de estos tipos de columnas, y luego proporciona una descripción detallada de las propiedades de los tipos de cada categoría, y un resumen de sus requerimientos de almacenamiento. El repaso es intencionalmente breve. Las descripciones más detalladas deben consultarse para obtener más información acerca de los tipos de datos particulares, como los formatos permitidos para especificar los tipos.
MySQL 5.0 soporta extensiones para tratar datos espaciales. Información al respecto se proporciona en Capítulo 18, Extensiones espaciales de MySQL.
Varias descripciones de los tipos de columnas usan estas convenciones:
-
MIndica la máxima anchura al mostrar los datos. El máximo ancho de muestra es 255.
-
DSe aplica a tipos de coma flotante y de coma fija e indica el número de dígitos a continuación del punto decimal. El valor máximo posible es 30, pero no debe ser mayor que
M-2. -
Los corchetes ('
[' y ']') indican partes de especificadores de tipos que son opcionales.
A continuación hay un resumen de los tipos de columnas numéricos. Para información adicional, consulte Sección 11.2, “Tipos numéricos”. Los requerimientos de almacenamiento de columna se dan en Sección 11.5, “Requisitos de almacenamiento según el tipo de columna”.
M indica la anchura máxima para
mostrar. La anchura máxima es 255. La anchura de muestra no
tiene nada que ver con el tamaño de almacenamiento o el rango
de valores que el valor puede contener, como se describe en
Sección 11.2, “Tipos numéricos”.
Si especifica ZEROFILL para columnas
numéricas,, MySQL añade automáticamente el atributo
UNSIGNED en la columna.
SERIAL es un alias para BIGINT
UNSIGNED NOT NULL AUTO_INCREMENT.
SERIAL DEFAULT VALUE en la definición de una
columna de tipo entero es un alias para NOT NULL
AUTO_INCREMENT UNIQUE.
Atención: Debe tener en cuenta
que cuando usa la resta entre valores enteros cuando uno de los
operandos es de tipo UNSIGNED, el resultado
no tiene signo. Consulte Sección 12.8, “Funciones y operadores de cast”.
-
BIT[(M)]En un tipo de datos bit.
Mindica el número de bits por valor, de 1 a 64. El valor por defecto es 1 si se omiteM.Este tipo de datos se añadió en MySQL 5.0.3 para
MyISAM, una extensión en 5.0.5 paraMEMORY,InnoDB, yBDB. Antes de 5.0.3,BITes un sinónimo deTINYINT(1). -
TINYINT[(M)] [UNSIGNED] [ZEROFILL]Un entero muy pequeño. El rango con signo es de
-128a127. El rango sin signo es de0a255. -
BOOL,BOOLEANSon sinónimos para
TINYINT(1). Un valor de cero se considera falso. Valores distintos a cero se consideran ciertos.En el futuro, se introducirá tratamiento completo de tipos booleanos según el estándard SQL.
-
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]Un entero pequeño. El rango con signo es de
-32768a32767. El rango sin signo es de0a65535. -
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]Entero de tamaño medio. El rango con signo es de
-8388608a8388607. El rango sin singo es de0a16777215. -
INT[(M)] [UNSIGNED] [ZEROFILL]Un entero de tamaño normal. El rango con signo es de
-2147483648a2147483647. El rango sin signo es de0a4294967295. -
INTEGER[(M)] [UNSIGNED] [ZEROFILL]Es un sinónimo de
INT. -
BIGINT[(M)] [UNSIGNED] [ZEROFILL]Un entero grande. El rango con signo es de
-9223372036854775808a9223372036854775807. El rango sin signo es de0a18446744073709551615.Algunos aspectos a considerar con respecto a las columnas
BIGINT:-
Toda la aritmética se hace usando valores
BIGINToDOUBLE, así que no debe usar enteros sin signos mayores que9223372036854775807(63 bits) except con funciones bit! Si lo hace, algunos de los últimos dígitos en el resultado pueden ser erróneos por culpa de errores de redondeo al convertir valoresBIGINTaDOUBLE.MySQL 5.0 puede tratar
BIGINTen los siguientes casos:-
Cuando usa enteros para almacenar valores grandes sin signo en una columna
BIGINT. -
En
MIN(col_name) oMAX(col_name), dondecol_namese refiere a una columnaBIGINT. -
Al usar operadores (
+,-,*, y así) donde ambos operadores son enteros.
-
-
Siempre puede guardar un valor entero exacto en un columna
BIGINTalmacenándolo usando una cadena de carácteres. En este caso, MySQL realiza una conversión cadena de carácteres-número que no implica representación de doble precisión intermedia. -
Los operadores
-,+, y*usanBIGINTen operaciones aritméticas cuando ambos operandos son valores enteros. Esto significa que si multiplica dos enteros grandes (o resultados de funciones que devuelven enteros), puede obtener resultados inesperados cuando el resultado es mayor que9223372036854775807.
-
-
FLOAT(p) [UNSIGNED] [ZEROFILL]Número con coma flotante.
prepresenta la precisión. Puede ir de 0 a 24 para números de coma flotante de precisión sencilla y de 25 a 53 para números de coma flotante con doble precisión. Estos tipos son como los tiposFLOATyDOUBLEdescritos a continuación.FLOAT(p)tiene le mismo rango que los tipos correspondientesFLOATyDOUBLE, pero la anchura de muestra y el número de decimales no están definidos.En MySQL 5.0, este es un valor de coma flotante auténtico.
Esta sintaxis se proprociona para compatibilidad con ODBC.
Usar
FLOATpuede darle algunos problemas inesperados ya que todos los cálculos se en MySQL se hacen con doble precisión. Consulte Sección A.5.7, “Resolver problemas con registros que no salen”. -
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]Un número de coma flotante pequeño (de precisión simple). Los valores permitidos son de
-3.402823466E+38a-1.175494351E-38,0, y de1.175494351E-38a3.402823466E+38. Si se especificaUNSIGNED, los valores negativos no se permiten.Mes la anchura de muestra yDes el número de dígitos significativos.FLOATsin argumentos oFLOAT(p) (dondepestá en el rango de 0 a 24) es un número de coma flotante con precisión simple. -
DOUBLE[(M,B)] [UNSIGNED] [ZEROFILL]Número de coma flotante de tamaño normal (precisión doble). Los valores permitidos son de
-1.7976931348623157E+308a-2.2250738585072014E-308,0, y de2.2250738585072014E-308a1.7976931348623157E+308. Si se especificaUNSIGNED, no se permiten valores negativos.Mes la anchura de muestra yBes el número de bits de precisión.DOUBLEsin parámetros oFLOAT(p) (dondepestá en el rango de 25 a 53) es un número de coma flotante con doble precisión. Un número de coma flotante con precision sencilla tiene una precisión de 7 decimales aproximadamente; un número con coma flotante de doble precisión tiene una precisión aproximada de 15 decimales. -
DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL],REAL[(M,D)] [UNSIGNED] [ZEROFILL]Son sinónimos de
DOUBLE. Excepción: Si el modo del servidor SQL incluye la opciónREAL_AS_FLOAT,REALes un sinónimo paraFLOATen lugar deDOUBLE. -
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]A partir de MySQL 5.0.3:
Número de punto fijo exacto y empaquetado.
Mes el número total de dígitos yDes el número de decimales. El punto decimal y (para números negativos) el signo '-' no se tiene en cuenta enM. SiDes 0, los valores no tienen punto decimal o parte fraccional. El máximo número de dígitos (M) paraDECIMALes 64. El máximo número de decimales soportados (D) es 30. SiUNSIGNEDse especifica, no se permiten valores negativos.Si se omite
D, el valor por defecto es 0. Si se omiteM, el valor por defecto es 10.Todos los cálculos básicos (
+, -, *, /) con columnasDECIMALse hacen con precisión de 64 dígitos decimales.Antes de MySQL 5.0.3:
Número de punto decimal fijo sin empaquetar. Se comporta como una columna
CHAR; "sin empaquetar" significa que el número se alacena como una cadena de carácteres, usando un carácter para cada dígito del valor.Mes el número total de dígitos yDes el número de decimales. El punto decimal y (para números negativos) el signo '-' no se cuenta enM, aunque se reserva espacio para él. SiDes 0, los valores no tienen punto decimal ni parte fraccional. El máximo rango de los valoresDECIMALes el mismo que paraDOUBLE, pero el rango real para una columnaDECIMALdada puede estar restringido por la elección deMyD. Si se especificaUNSIGNEDno se permiten números negativos.Si se omite
D, el valor por defecto es 0. Si se omiteM, el valor por defecto es 10. -
DEC[(M[,D])] [UNSIGNED] [ZEROFILL],NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL],FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]Son sinónimos para
DECIMAL. El sinónimoFIXEDestá disponible por compatibilidad con otros servidores.
Un resumen de los tipos de columnas temporales se muestra a continuación. Para información adicional, consulte Sección 11.3, “Tipos de fecha y hora”. Los requerimientos de almacenamiento se dan en Sección 11.5, “Requisitos de almacenamiento según el tipo de columna”.
-
DATEUna fecha. El rango soportado es de
'1000-01-01'a'9999-12-31'. MySQL muestra valoresDATEen formato'YYYY-MM-DD', pero permite asignar valores a columnasDATEusando cadenas de carácteres o números. -
DATETIMECombinación de fecha y hora. El rango soportado es de
'1000-01-01 00:00:00'a'9999-12-31 23:59:59'. MySQL muestra valoresDATETIMEen formato'YYYY-MM-DD HH:MM:SS', pero permite asignar valores a las columnasDATETIMEusando cadenas de carácteres o números. -
TIMESTAMP[(M)]Una marca temporal. El rango es de
'1970-01-01 00:00:00'hasta el año2037.Una columna
TIMESTAMPes útil para registrar la fecha y hora de una operaciónINSERToUPDATE. La primera columnaTIMESTAMPen una tabla se rellena automáticamente con la fecha y hora de la operación más reciente si no le asigna un valor. Puede asignar a cualquier columnaTIMESTAMPla fecha y hora actual asignándole un valorNULL.En MySQL 5.0,
TIMESTAMPse retorna como una cadena de carácteres en el formato'YYYY-MM-DD HH:MM:SS'cuya anchura de muestra son 19 carácteres. Si quiere obtener el valor como un número, debe añadir+0a la columa timestamp . -
TIMEUna hora. El rango es de
'-838:59:59'a'838:59:59'. MySQL muestra los valoresTIMEen formato'HH:MM:SS', pero permite asingar valores a columnasTIMEusando números o cadenas de carácteres. -
YEAR[(2|4)]Un año en formato de dos o cuatro dígitos. El valor por defecto está en formato de cuatro dígitos. En formato de cuatro dígitos, los valores permitidos son de
1901a2155, y0000. En formato de dos dígitos, los valores permitidos son de70a69, representando los años de 1970 a 2069. MySQL muestra los valoresYEARen formatoYYYYpero permite asignar valores a columnasYEARusando cadenas de carácteres o números.
Un resumen de los tipos de columnas de cadenas de carácteres se muestra a continuación. Para información adicional, consulte Sección 11.4, “Tipos de cadenas de caracteres”. Los requerimientos de almacenamiento de estas columnas se dan en Sección 11.5, “Requisitos de almacenamiento según el tipo de columna”.
En algunos casos, MySQL puede cambiar una columna de cadena de
carácteres a un tipo diferente para un comando CREATE
TABLE o ALTER TABLE . Consulte
Sección 13.1.5.1, “Cambios tácitos en la especificación de columnas”.
Los tipos de cadenas de carácteres MySQL 5.0 incluyen algunas características que puede que no haya encontrado trabajando con versiones anteriores de MySQL anteriores a la 4.1:
-
Las definiciones de columnas para varios tipos de datos de cadenas de carácteres incluyen un atributo
CHARACTER SETpara especificar el conjunto de carácteres y, ocasionalmente, una colación. (CHARSETes sinónimo deCHARACTER SET.) Estos atributos se aplican a los tiposCHAR,VARCHAR,TEXT,ENUM, ySET. Por ejemplo:CREATE TABLE t ( c1 CHAR(20) CHARACTER SET utf8, c2 CHAR(20) CHARACTER SET latin1 COLLATE latin1_bin );Esta definición de tabla crea una columna llamada
c1que tiene un conjunto de carácteresutf8con la colación por defecto para ese conjunto de carácteres, y una columna llamadac2que tiene el conjunto de caráctereslatin1y la colación binaria para el conjunto de carácteres. La colación binaria no es sensible a mayúsculas. -
MySQL 5.0 interpreta las especificaciones de longitud en las definiciones de las columnas en unidades de carácteres . (En algunas versiones anteriores de MySQL la longitud se interpreta en bytes.)
-
Para los tipos
CHAR,VARCHAR, y theTEXT, el atributoBINARYhace que se asigne a la columna la colación binaria del conjunto de carácteres. -
Las ordenaciones y comparaciones de las columnas de tipo carácter se basan en el conjunto de carácteres asignado a la columna. Para versiones anteriores, la comparación y ordenación se basan en la colación del conjunto de carácteres del servidor. Para columnas
CHARyVARCHAR, puede declarar que la columna con el atributoBINARYrealice la ordenación y la comparación usando los códigos de los valores subyacentes en lugar del orden léxico.
Para más información acerca del soporte de conjuntos de carácteres en MySQL 5.0, consulte Capítulo 10, Soporte de conjuntos de caracteres.
-
[NATIONAL] CHAR(M) [BINARY | ASCII | UNICODE]Una cadena de carácteres de longitud fija que siempre tiene el número necesario de espacios a la derecha para ajustarla a la longitud especificada al almacenarla.
Mrepresenta la longitud de la columna. El rango deMen MySQL 5.0 es de 0 a 255 carácteres.Nota: Los espacios a la derecha se borran cuando se obtiene los valores
CHAR.Antes de MySQL 5.0.3, una columna
CHARcon una longitud especificada mayor que 255 se convierte al tipoTEXTmás pequeño que pueda tener los valores de la longitud dada. Por ejemplo,CHAR(500)se convierte aTEXT, yCHAR(200000)se convierte enMEDIUMTEXT. Esta es una característica de compatibilidad. Sin embargo, esta conversión causa que la columna tenga longitud variable, y también afecta a la eliminación de espacios.CHARes una abreviatura paraCHARACTER.NATIONAL CHAR(o su forma equivalente de,NCHAR) es la forma estándard de SQL de definir que una columnaCHARdebe usar el conjunto de carácteres por defecto. Este es el comportamiento por defecto en MySQL.El atributo
BINARYes una abreviatura para especificar la colación binaria del conjunto de carácteres de la columna. La ordenación y comparación se basa en los valores numéricos de los carácteres.El tipo de columna
CHAR BYTEes un alias paraCHAR BINARY. Esta es una característica de compatibilidad.El atributo
ASCIIpuede especificarse paraCHAR. Asigna el conjunto de caráctereslatin1.El atributo
UNICODEpuede especificarse en MySQL 5.0 paraCHAR. Asigna el conjunto de carácteresucs2.MySQL le permite crear un tipo de columna
CHAR(0). Esto es útil cuando tiene que cumplir con las especificaciones de alguna aplicación vieja que dependa de la existencia de una columna pero que no usa realmente el valor. Esto es también útil cuando necesita una columna que sólo pueda tener dos valores: Una columnaCHAR(0)que no esté definido comoNOT NULLocupa sólo un bit y sólo puede tener dos valoresNULLy''(la cadena de carácteres vacía). -
CHAREs un sinónimo de
CHAR(1). -
[NATIONAL] VARCHAR(M) [BINARY]Cadena de carácteres de longitud variable.
Mrepresenta la longitud de columna máxima. En MySQL 5.0, el rango deMes de 0 a 255 antes de MySQL 5.0.3, y de 0 a 65,535 en MySQL 5.0.3 y posterior. (La longitud máxima real de unVARCHARen MySQL 5.0 se determina por el tamaño de registro máximo y el conjunto de carácteres que use. La longitud máxima efectiva desde MySQL 5.0.3 es de 65,532 bytes.)Nota: Antes de 5.0.3, los espacios finales se eliminaban cuando se almacenaban los valores
VARCHAR, lo que difiere de le especificación estándard de SQL.Previo a MySQL 5.0.3, una columna
VARCHARcon una longitud especificada mayor a 255 se convertía al valor de tipoTEXTmás pequeño que podía soportar el valor de la longitu dada. Por ejemplo,VARCHAR(500)se convertía aTEXT, yVARCHAR(200000)se convertía aMEDIUMTEXT. Esto era una cuestión de compatibilidad. Sin embargo, esta conversión afectaba la eliminación de espacios finales.VARCHARes la abreviación deCHARACTER VARYING.En MySQL 5.0, el atributo
BINARYes abreviatura para especificar la colación binaria del conjunto de carácteres de la columna. La ordenación y la comparación se basa en los valores numéricos de los carácteres.Desde MySQL 5.0.3,
VARCHARse guarda con un prefijo de longitud de uno o dos bytes + datos. La longitud del prefijo es de dos bytes si la columnaVARCHARse declara con una longitud mayor a 255. -
BINARY(M)El tipo
BINARYes similar al tipoCHAR, pero almacena cadenas de datos binarios en lugar de cadenas de carácteres no binarias. -
VARBINARY(M)El tipo
VARBINARYes similar al tipoVARCHAR, pero almacena cadenas de carácteres binarias en lugar de cadenas de carácteres no binarias. -
TINYBLOBUna columna
BLOBcon una longitud máxima de 255 (2^8 - 1) bytes. -
TINYTEXTUna columna
TEXTcon longitud máxima de 255 (2^8 - 1) carácteres. -
BLOB[(M)]Una columna
BLOBcon longitud máxima de 65,535 (2^16 - 1) bytes.Una longitud opcional
Mpuede darse para este tipo en MySQL 5.0. Si se hace, MySQL creará las columnas como el tipoBLOBde tamaño mínimo para tratar los valores deMbytes. -
TEXT[(M)]Una columna
TEXTcon longitud máxima de 65,535 (2^16 - 1) carácteres.En MySQL 5.0, se puede dar una longitud opcional
M. En ese caso MySQL creará las columnas con el tipoTEXTde longitud mínima para almacenar los valors de longitudM. -
MEDIUMBLOBUna columna
BLOBcon longitud de 16,777,215 (2^24 - 1) bytes. -
MEDIUMTEXTUna columna
TEXTcon longitud máxima de 16,777,215 (2^24 - 1) carácteres. -
LONGBLOBUna columna
BLOBcon longitud máxima de 4,294,967,295 o 4GB (2^32 - 1) bytes. La longitud máxima efectiva (permitida) de las columnasLONGBLOBdepende del tamaño máximo configurado para los paquetes en el protocolo cliente/servidor y la memoria disponible. -
LONGTEXTUna columna
TEXTcon longitud máxima de 4,294,967,295 or 4GB (2^32 - 1) carácteres. La longitud máxima efectiva (permitida) de columnasLONGTEXTdepende del tamaño máximo de paquete configurado en el protocolo cliente/servidor y la memoria disponible. -
ENUM('value1','value2',...)Una enumeración. Un objeto de cadena de carácteres que sólo puede tener un valor, elegido de una lista de valores
'value1','value2',...,NULLo el valor de error especial''. Una columnaENUMpuede tener un máximo de 65,535 valores distintos. Los valoresENUMse representan internamente como enteros. -
SET('value1','value2',...)Un conjunto. Un objeto de cadena de carácteres que puede tener cero o más valores que deben pertencer a la lista de valores
'value1','value2',...Una columnaSETpuede tener un máximo de 64 miembros. Los valoresSETse representan internamente como enteros.