Está en la página 1de 1

Tipos de datos

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 caracteres. 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.

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.

Panoramica de tipos 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
omite M .
Este tipo de datos se añadió en MySQL 5.0.3 para MyISAM, una extensión en 5.0.5 para MEMORY,

STEP InnoDB, y BDB. Antes de 5.0.3, BIT es un sinónimo de TINYINT(1).


• TINYINT[(M)] [UNSIGNED] [ZEROFILL]

1
Un entero muy pequeño. El rango con signo es de -128 a 127. El rango sin signo es de 0 a 255.
• 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ándar SQL.
• SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
Un entero pequeño. El rango con signo es de -32768 a 32767. El rango sin signo es de 0 a 65535.

Panorámicas de tipo fecha y hora


DATE
Una fecha. El rango soportado es de '1000-01-01' a '9999-12-31'. MySQL muestra valores
DATE en formato 'YYYY-MM-DD', pero permite asignar valores a columnas DATE usando cadenas de
caracteres 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 valores DATETIME en formato 'YYYY-MM-DD HH:MM:SS', pero permite
asignar valores a las columnas DATETIME usando cadenas de caracteres o números.
• TIMESTAMP[(M)]
Una marca temporal. El rango es de '1970-01-01 00:00:00' hasta el año 2037.Una columna TIMESTAMP es útil para registrar la fecha y hora de una operación INSERT o
UPDATE
. La primera columna TIMESTAMP en una tabla se rellena automáticamente con la fecha y hora de la

STEP
operación más reciente si no le asigna un valor. Puede asignar a cualquier columna TIMESTAMP la
fecha y hora actual asignándole un valor NULL .
En MySQL 5.0, TIMESTAMP se retorna como una cadena de caracteres en el formato 'YYYY-MM-DD
HH:MM:SS' cuya anchura de muestra son 19 caracteres. Si quiere obtener el valor como un número,

2
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 valores TIME en
formato 'HH:MM:SS', pero permite asingar valores a columnas TIME usando números o cadenas de
caracteres.
• 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 a 2155, y 0000. En formato de dos
dígitos, los valores permitidos son de 70 a 69, representando los años de 1970 a 2069. MySQL muestra
los valores YEAR en formato YYYY pero permite asignar valores a columnas YEAR usando cadenas de
caracteres o números.

Tipos numericos
MySQL soporta todos los tipos de datos SQL numéricos estándar. Estos tipos incluyen los tipos numéricos
exactos (INTEGER, SMALLINT, DECIMAL, y NUMERIC), así como los tipos de datos aproximados (FLOAT,
REAL, y DOUBLE PRECISION). La palabra clave INT es sinónimo de INTEGER, y la palabra clave DEC es
sinónimo de DECIMAL.
En MySQL 5.0.3, un tipo de datos BIT está disponible para almacenar valores de un bit. (Antes de 5.0.3,
MySQL interpreta BIT como TINYINT(1).) En MySQL 5.0.3, BIT lo soporta sólo tablas MyISAM. MySQL
5.0.5 extiende soporte de BIT para MEMORY, InnoDB, y BDB.

STEP Como extensión de los estándares SQL, MySQL soporta los tipos enteros TINYINT, MEDIUMINT, y
BIGINT. La siguiente tablas muestra el almacenamiento requerido y el rango para cada uno de los tipos

3
enteros.
Tipo Bytes Valor Mínimo Valor Máximo
(Con signo/Sin signo) (Con signo/Sin signo)
TINYINT 1 -128 127
0 255
SMALLINT 2 -32768 32767
0 65535
MEDIUMINT 3 -8388608 8388607
0 16777215
INT 4 -2147483648 2147483647
0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807
0 18446744073709551615

Tipos de fecha y hora


Los tipos de fecha y hora para representar valores temporales son DATETIME, DATE, TIMESTAMP,
TIME, y YEAR. Cada tipo temporal tiene un rango de valores legales, así como un valor “zero” que se
usa cuando se especifica un valor ilegal que MySQL no puede representar. El tipo TIMESTAMP tiene un
comportamiento automático especial, descrito posteriormente.
STEP Desde MySQL 5.0.2, MySQL da advertencias/errores si trata de insertar una fecha ilegal. Puede
hacer que MySQL acepte ciertas fechas, tales como '1999-11-31', usando el modo SQL

4
ALLOW_INVALID_DATES . (Antes de 5.0.2, este modo era el comportamiento por defecto de MySQL).
Esto es útil cuando quiere almacenar el valor “posiblemente erróneo” que el usuario especifica (por
ejemplo, en un formulario web) en la base de datos para un posterior procesamiento. En este modo,
MySQL sólo verifica que el mes esté en el rango de 0 a 12 y que el día esté en el rango de 0 a 31. Estos
rangos incluyen cero ya que MySQL permite almacenar fechas cuando el día o el mes son cero en
columnas DATE o DATETIME . Esto es muy útil para aplicaciones que necesiten almacenar una fecha
de nacimiento para la que no sepa la fecha exacta. En este caso, simplemente almacena la fecha como
'1999-00-00' o '1999-01-00'. Si almacena valores similares a estos, no debe esperar obtener
resultados correctos para funciones tales como DATE_SUB() or DATE_ADD que necesitan fechas
completas. (Si no quiere permitir ceros en las fechas, puede usar el modo SQL NO_ZERO_IN_DATE ).
MySQL permite almacenar '0000-00-00' como “fecha de pruebas” (si no está usando el modo SQL
NO_ZERO_DATE ). Esto es mejor que usar (y usa menos espacio de datos e índice) que usar valores NULL

Los tipos de datos DATETIME, DATE y TIMESTAMP


Los tipos DATETIME, DATE, and TIMESTAMP están relacionados. Esta sección describe sus
características, en qué se parecen y en qué difieren.
STEP El tipo DATETIME se usa cuando necesita valores que contienen información de fecha y
hora. MySQL

5
recibe y muestra los valores DATETIME en formato 'YYYY-MM-DD HH:MM:SS' . El rango
soportado es
de '1000-01-01 00:00:00' a '9999-12-31 23:59:59'. (“Soportado” significa que aunque valores
anteriores pueden funcionar, no hay garantías)
El tipo DATE se usa cuando necesita sólo un valor de fecha, sin una parte de hora. MySQL
recibe y
muestra los valores DATE en formato 'YYYY-MM-DD' . El rango soportado es de '1000-01-01'
a
'9999-12-31'.
El tipo TIMESTAMP tiene varias propiedades, en función de la versión de MySQSL y el
modo SQL que
esté ejecutando el servidor. Estas propiedades se describen posteriormente en esta
sección.

Tipo de cadenas de caracteres


STEP 5.0.3, también difieren en la longitud máxima y en cómo se tratan los espacios finales.
Los tipos CHAR y VARCHAR se declaran con una longitud que indica el máximo número de

6
caracteres que
quiere almacenar. Por ejemplo, CHAR(30) puede almacenar hasta 30 caracteres.
La longitud de una columna CHAR se fija a la longitud que se declara al crear la tabla. La longitud
puede
ser cualquier valor de 0 a 255. Cuando los valores CHAR se almacenan, se añaden espacios a la
derecha
hasta las longitud específica. Cuando los valores CHAR se recuperan, estos espacios se borran.
Los valores en columnas VARCHAR son cadenas de caracteres de longitud variable. En MySQL 5.0,
la
longitud puede especficarse de 0 a 255 antes de MySQL 5.0.3, y de 0 a 65,535 en 5.0.3 y versiones
posteriores. (La máxima longitud efectiva de un VARCHAR en MySQL 5.0 se determina por el
tamaño de
registro máximo y el conjunto de caracteres usados. La longitud máxima total es de 65,532 bytes.)
En contraste con CHAR, VARCHAR almacena los valores usando sólo los caracteres necesarios,
más un
byte adicional para la longitud (dos bytes para columnas que se declaran con una longitud
superior a 255)

Los tipos de BINARY y VARBINARY


STEP Los tipos BINARY y VARBINARY son similares a CHAR y VARCHAR, excepto que

7
contienen cadenas de
caracteres binarias en lugar de cadenas de caracteres no binarias. Esto es,
contienen cadenas de bytes
en lugar de cadenas de caracteres. Esto significa que no tienen conjunto de
caracteres asignado, y la
comparación y ordenación se basa en los valores numéricos de los valores de
los bytes.
La longitud máxima disponible es la máxima para BINARY t VARBINARY como
para CHAR y VARCHAR,
excepto que la longitud para BINARY y VARBINARY es una longitud en bytes en
lugar de en caracteres.

Requisitos de almacenamiento según el tipo de columna


Los requerimientos de almacenamiento para cada uno de los tipos de columnas soportados
por MySQL se
STEP listan por categoría.
El máximo tamaño de un registro en una tabla MyISAM es 65,534 bytes. Cada columna BLOB y

8
TEXT
cuenta sólo de cinco a nueve bytes más alla de su tamaño.
Tipo de columna Almacenamiento requerido
TINYINT 1 byte
SMALLINT 2 bytes
MEDIUMINT 3 bytes
INT, INTEGER 4 bytes
BIGINT 8 bytes
FLOAT(p) 4 bytes si 0 <= p <= 24, 8 bytes si 25 <= p <= 53
FLOAT 4 bytes
DOUBLE [PRECISION], objeto REAL 8 bytes
DECIMAL(M,D), NUMERIC(M,D) Varía; consulte la siguiente explicación

Escoger el tipo de columna correcto


STEP Para almacenamiento óptimo, debe tratar de usar el tipo más preciso en todos los
casos. Por ejemplo, si

9
una columna entera se usa para valores en el rango de 1 a 99999, entonces
MEDIUMINT UNSIGNED es
el mejor tipo. De los tipos que representan todos los valores requeridos, este tipo
usa la menor cantidad
de espacio.
Las tablas creadas en MySQL 5.0.3 y versiones posteriores usan un nuevo formato
de almacenamiento
para columnas DECIMAL . Todos los cálculos básicos (+,-,*,/) con columnas DECIMAL
se realizan con
precisión de 64 dígitos decimales.

Usar tipos de columnas de otros motores de bases de datos


Tipos de otros vendedores Tipos MySQL
BOOL, TINYINT
BOOLEAN TINYINT
CHAR VARYING(M) VARCHAR(M)
STEP DEC DECIMAL
FIXED DECIMAL

10
FLOAT4 FLOAT
FLOAT8 DOUBLE
INT1 TINYINT
INT2 SMALLINT
INT3 MEDIUMINT
INT4 INT
INT8 BIGINT
LONG VARBINARY MEDIUMBLOB
LONG VARCHAR MEDIUMTEXT
LONG MEDIUMTEXT
MIDDLEINT MEDIUMINT
NUMERIC DECIMAL

También podría gustarte