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:
-
M
Indica la máxima anchura al mostrar los datos. El máximo ancho de muestra es 255.
-
D
Se 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.
M
indica 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,BIT
es un sinónimo deTINYINT(1)
. -
TINYINT[(
M
)] [UNSIGNED] [ZEROFILL]Un entero muy pequeño. El rango con signo es de
-128
a127
. El rango sin signo es de0
a255
. -
BOOL
,BOOLEAN
Son 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
-32768
a32767
. El rango sin signo es de0
a65535
. -
MEDIUMINT[(
M
)] [UNSIGNED] [ZEROFILL]Entero de tamaño medio. El rango con signo es de
-8388608
a8388607
. El rango sin singo es de0
a16777215
. -
INT[(
M
)] [UNSIGNED] [ZEROFILL]Un entero de tamaño normal. El rango con signo es de
-2147483648
a2147483647
. El rango sin signo es de0
a4294967295
. -
INTEGER[(
M
)] [UNSIGNED] [ZEROFILL]Es un sinónimo de
INT
. -
BIGINT[(
M
)] [UNSIGNED] [ZEROFILL]Un entero grande. El rango con signo es de
-9223372036854775808
a9223372036854775807
. El rango sin signo es de0
a18446744073709551615
.Algunos aspectos a considerar con respecto a las columnas
BIGINT
:-
Toda la aritmética se hace usando valores
BIGINT
oDOUBLE
, 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 valoresBIGINT
aDOUBLE
.MySQL 5.0 puede tratar
BIGINT
en los siguientes casos:-
Cuando usa enteros para almacenar valores grandes sin signo en una columna
BIGINT
. -
En
MIN(
col_name
) oMAX(
col_name
), dondecol_name
se refiere a una columnaBIGINT
. -
Al usar operadores (
+
,-
,*
, y así) donde ambos operadores son enteros.
-
-
Siempre puede guardar un valor entero exacto en un columna
BIGINT
almacená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*
usanBIGINT
en 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.
p
representa 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 tiposFLOAT
yDOUBLE
descritos a continuación.FLOAT(p)
tiene le mismo rango que los tipos correspondientesFLOAT
yDOUBLE
, 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
FLOAT
puede 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+38
a-1.175494351E-38
,0
, y de1.175494351E-38
a3.402823466E+38
. Si se especificaUNSIGNED
, los valores negativos no se permiten.M
es la anchura de muestra yD
es el número de dígitos significativos.FLOAT
sin argumentos oFLOAT(
p
) (dondep
está 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+308
a-2.2250738585072014E-308
,0
, y de2.2250738585072014E-308
a1.7976931348623157E+308
. Si se especificaUNSIGNED
, no se permiten valores negativos.M
es la anchura de muestra yB
es el número de bits de precisión.DOUBLE
sin parámetros oFLOAT(
p
) (dondep
está 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
,REAL
es un sinónimo paraFLOAT
en lugar deDOUBLE
. -
DECIMAL[(
M
[,D
])] [UNSIGNED] [ZEROFILL]A partir de MySQL 5.0.3:
Número de punto fijo exacto y empaquetado.
M
es el número total de dígitos yD
es el número de decimales. El punto decimal y (para números negativos) el signo '-
' no se tiene en cuenta enM
. SiD
es 0, los valores no tienen punto decimal o parte fraccional. El máximo número de dígitos (M
) paraDECIMAL
es 64. El máximo número de decimales soportados (D
) es 30. SiUNSIGNED
se 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 columnasDECIMAL
se 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.M
es el número total de dígitos yD
es 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. SiD
es 0, los valores no tienen punto decimal ni parte fraccional. El máximo rango de los valoresDECIMAL
es el mismo que paraDOUBLE
, pero el rango real para una columnaDECIMAL
dada puede estar restringido por la elección deM
yD
. Si se especificaUNSIGNED
no 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ónimoFIXED
está 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”.
-
DATE
Una fecha. El rango soportado es de
'1000-01-01'
a'9999-12-31'
. MySQL muestra valoresDATE
en formato'YYYY-MM-DD'
, pero permite asignar valores a columnasDATE
usando cadenas de carácteres o números. -
DATETIME
Combinació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 valoresDATETIME
en formato'YYYY-MM-DD HH:MM:SS'
, pero permite asignar valores a las columnasDATETIME
usando 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
TIMESTAMP
es útil para registrar la fecha y hora de una operaciónINSERT
oUPDATE
. La primera columnaTIMESTAMP
en 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 columnaTIMESTAMP
la fecha y hora actual asignándole un valorNULL
.En MySQL 5.0,
TIMESTAMP
se 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+0
a la columa timestamp . -
TIME
Una hora. El rango es de
'-838:59:59'
a'838:59:59'
. MySQL muestra los valoresTIME
en formato'HH:MM:SS'
, pero permite asingar valores a columnasTIME
usando 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
1901
a2155
, y0000
. En formato de dos dígitos, los valores permitidos son de70
a69
, representando los años de 1970 a 2069. MySQL muestra los valoresYEAR
en formatoYYYY
pero permite asignar valores a columnasYEAR
usando 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 SET
para especificar el conjunto de carácteres y, ocasionalmente, una colación. (CHARSET
es 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
c1
que tiene un conjunto de carácteresutf8
con la colación por defecto para ese conjunto de carácteres, y una columna llamadac2
que tiene el conjunto de caráctereslatin1
y 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 atributoBINARY
hace 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
CHAR
yVARCHAR
, puede declarar que la columna con el atributoBINARY
realice 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.
M
representa la longitud de la columna. El rango deM
en 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
CHAR
con una longitud especificada mayor que 255 se convierte al tipoTEXT
má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.CHAR
es una abreviatura paraCHARACTER
.NATIONAL CHAR
(o su forma equivalente de,NCHAR
) es la forma estándard de SQL de definir que una columnaCHAR
debe usar el conjunto de carácteres por defecto. Este es el comportamiento por defecto en MySQL.El atributo
BINARY
es 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 BYTE
es un alias paraCHAR BINARY
. Esta es una característica de compatibilidad.El atributo
ASCII
puede especificarse paraCHAR
. Asigna el conjunto de caráctereslatin1
.El atributo
UNICODE
puede 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 NULL
ocupa sólo un bit y sólo puede tener dos valoresNULL
y''
(la cadena de carácteres vacía). -
CHAR
Es un sinónimo de
CHAR(1)
. -
[NATIONAL] VARCHAR(
M
) [BINARY]Cadena de carácteres de longitud variable.
M
representa la longitud de columna máxima. En MySQL 5.0, el rango deM
es 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 unVARCHAR
en 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
VARCHAR
con una longitud especificada mayor a 255 se convertía al valor de tipoTEXT
má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.VARCHAR
es la abreviación deCHARACTER VARYING
.En MySQL 5.0, el atributo
BINARY
es 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,
VARCHAR
se guarda con un prefijo de longitud de uno o dos bytes + datos. La longitud del prefijo es de dos bytes si la columnaVARCHAR
se declara con una longitud mayor a 255. -
BINARY(
M
)El tipo
BINARY
es similar al tipoCHAR
, pero almacena cadenas de datos binarios en lugar de cadenas de carácteres no binarias. -
VARBINARY(
M
)El tipo
VARBINARY
es similar al tipoVARCHAR
, pero almacena cadenas de carácteres binarias en lugar de cadenas de carácteres no binarias. -
TINYBLOB
Una columna
BLOB
con una longitud máxima de 255 (2^8 - 1) bytes. -
TINYTEXT
Una columna
TEXT
con longitud máxima de 255 (2^8 - 1) carácteres. -
BLOB[(
M
)]Una columna
BLOB
con longitud máxima de 65,535 (2^16 - 1) bytes.Una longitud opcional
M
puede darse para este tipo en MySQL 5.0. Si se hace, MySQL creará las columnas como el tipoBLOB
de tamaño mínimo para tratar los valores deM
bytes. -
TEXT[(
M
)]Una columna
TEXT
con 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 tipoTEXT
de longitud mínima para almacenar los valors de longitudM
. -
MEDIUMBLOB
Una columna
BLOB
con longitud de 16,777,215 (2^24 - 1) bytes. -
MEDIUMTEXT
Una columna
TEXT
con longitud máxima de 16,777,215 (2^24 - 1) carácteres. -
LONGBLOB
Una columna
BLOB
con longitud máxima de 4,294,967,295 o 4GB (2^32 - 1) bytes. La longitud máxima efectiva (permitida) de las columnasLONGBLOB
depende del tamaño máximo configurado para los paquetes en el protocolo cliente/servidor y la memoria disponible. -
LONGTEXT
Una columna
TEXT
con longitud máxima de 4,294,967,295 or 4GB (2^32 - 1) carácteres. La longitud máxima efectiva (permitida) de columnasLONGTEXT
depende 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
',...
,NULL
o el valor de error especial''
. Una columnaENUM
puede tener un máximo de 65,535 valores distintos. Los valoresENUM
se 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 columnaSET
puede tener un máximo de 64 miembros. Los valoresSET
se representan internamente como enteros.