Descripción detallada de los tipos de datos MySQL
Cada columna de datos tiene su tipo específico, que determina cómo MySQL ve los datos de la columna. Podemos almacenar valores enteros en columnas de tipo carácter y MySQL los tratará como cadenas.
Hay tres tipos de columnas en MySQL: números, cadenas y fecha/hora.
Desde una perspectiva amplia de categorías, solo hay tres tipos de columnas, al igual que los tipos numéricos. Pero cada tipo de columna se puede subdividir.
Los distintos tipos de columnas se describen en detalle a continuación.
Tipos de columnas de datos numéricos
Los tipos de columnas numéricas incluyen números enteros y tipos de punto flotante.
Tinyint: 1 byte es un entero positivo muy pequeño, con signo: -128~127, sin signo: 0~255.
SMALLINT: entero pequeño de 2 bytes, con signo: -32768~32767, sin signo: 0~65535
Medio: entero mediano de 3 bytes, con signo:- 8388608~8388607 , sin firmar: 0~16777215.
Int: entero estándar de 4 bytes, con signo: -2147483648 ~ 2147483647, sin signo: 0 ~ 4294967295.
Bigint: entero de 8 bytes, con signo: -9223372036854775808 ~ 92337203685475807, sin signo: 0 ~ 1844644073709551615.
Flotante: número de coma flotante de precisión simple de 4 bytes, valor mínimo distinto de cero: +-1.175494351e-38, valor máximo distinto de cero: +-3.4023466e+38.
Doble: número de punto flotante de doble precisión de 8 bytes, valor mínimo distinto de cero: +-2.22507385072014e-308, valor máximo distinto de cero: +-1.7961348 623157 e+308.
Decimal: Número de coma flotante de M+2 bytes en forma de cadena. El rango de valores es variable y está determinado por los valores de M y D.
MYSQL. admite una gran cantidad de tipos de columnas. Se puede dividir en tres categorías: tipos numéricos, tipos de fecha y hora y tipos de cadenas (caracteres). Este capítulo comienza con una descripción general de los tipos disponibles y resume los requisitos de almacenamiento para cada tipo, y luego describe las categorías de tipo dentro de cada tipo con más detalle. La descripción general se simplifica intencionalmente. Una descripción más detallada debe consultar la información adicional sobre los tipos de columnas de primer plano, por ejemplo, para las cuales puede especificar los formatos de valores permitidos.
Los tipos de columnas soportados por MySQL se enumeran a continuación. Las siguientes letras de código se utilizan en la descripción:
m indica el tamaño máximo de visualización. La longitud máxima del tamaño de visualización es 255. d es para tipos de punto flotante. Indica el número de dígitos después del punto decimal. El valor máximo posible es 30, pero no debe ser mayor que M-2.
Los corchetes ("[" y "]") especifican modificadores de tipo opcionales.
Tenga en cuenta que si se especifica ZEROFILL para una columna, MySQL agregará automáticamente un atributo sin firmar a la columna.
Advertencia: Debes saber que cuando utilizas la resta entre dos valores enteros, si uno de ellos está sin signo, el resultado también estará sin signo. Consulte la Sección 6.3.5 Función de transmisión.
tinyint [(m)] [sin firmar] [relleno con ceros] -128 a 127. El rango sin signo es de 0 a 255.
BITBOOL Son sinónimos de TINYINT (1).
small[(m)][unsigned][zero fill] es un entero pequeño. El rango con signo es de -32768 a 32767. El rango sin signo es de 0 a 65535.
mediumint[(m)][unsigned][zero fill] es un número entero de tamaño mediano. El rango con signo es -8388608 a 8388607. El rango sin firmar es de 0 a 16777215.
INT【(M)】【UNSIGNED】【relleno de ceros】Entero de tamaño normal.
El rango con signo es -2147483648 a 2147483647. El rango sin firmar es de 0 a 4294967295.
entero [(m)] [sin firmar] [relleno cero] sinónimo de int.
bigint[(m)][unsigned][zero fill] es un número entero grande. El rango con signo es -9223372036854775808 a 9223685475807. El rango sin firmar es de 0 a 1844674073709551615.
Algunas cosas que debes saber sobre las columnas BIGINT:
Valores BIGINT o DOUBLE, por lo que no se deben usar enteros grandes sin signo mayores que 9223372036854775807 (63 bits), ¡excepto con funciones de bits! Si hace esto, algunos de los números grandes en el resultado pueden ser incorrectos debido a errores de redondeo al convertir BIGINT a DOUBLE. MySQL 4.0 puede manejar BIGINT en las siguientes situaciones:
Utilice un número entero para almacenar un valor grande sin signo en una columna BIGINT.
en MIN(big_int_column) y MAX(big_int_column).
Los operadores (+, -, *, etc.) se utilizan cuando ambos operandos son números enteros.
Normalmente, los números enteros exactos se almacenan como cadenas en columnas BIGINT. En este caso, MySQL realizará una conversión de cadena a número, incluida una representación doble sin datos intermedios.
Cuando ambos parámetros son valores enteros, "-", "+" y "*" utilizarán la operación BIGINT. Esto significa que si el resultado del producto de dos números enteros grandes (o el resultado devuelto por una función es un número entero) es mayor que 9223372036854775807, es posible que obtenga resultados inesperados.
flotante (precisión) [sin firmar] [relleno cero] número de punto flotante.
La precisión puede ser
flotante [(m, d)] [sin signo] [relleno con ceros] Un pequeño número de punto flotante (precisión simple). Los valores permitidos son -3.402823466E+38 a -1.175451e-38, 0 y 1.175438+0e-38 a 3.5466e. Si se especifica UNSIGNED, no se permiten valores negativos. m es el ancho de visualización y d es el número de decimales. FLOAT no tiene parámetros o x
doble [(m, d)] [unsigned] [zerofill] Un número de punto flotante de tamaño normal (doble precisión). Los valores permitidos son -1.796961348 623157 e+308 a -2.2014e-308, 0 y 2.3488+04e; si se especifica UNSIGNED, no se permiten valores negativos. m es el ancho de visualización y d es el número de decimales. DOUBLE no tiene parámetro Hu o tiene 25 parámetros
Doble [(M, D)] [Sin signo] [Relleno con ceros]
Número real [(m, d)] [Ninguno Símbolo] [Relleno cero] Son sinónimos de DOBLE.
decimal[(m[,d])][unsigned][zerofill] número de punto flotante sin comprimir. Funciona como una columna CHAR: "desempaquetado" significa que el número se almacena como una cadena y se utilizará un carácter para cada bit del valor. Los puntos decimales y los signos "-" de los números negativos no se cuentan en m (pero se conservan sus espacios). Si d es 0, el valor no tendrá punto decimal ni parte decimal. El rango máximo de valores decimales es consistente con DOUBLE, pero el rango real puede estar limitado por los myd elegidos para una columna decimal determinada. Si se especifica UNSIGNED, no se permiten valores negativos. Si se omite d, el valor predeterminado es 0. Si se omite m, el valor predeterminado es 10. Antes de MySQL 3.23, el parámetro m tenía que incluir el espacio requerido para el signo y el punto decimal.
DEC[(M[,D])][Sin firmar][Relleno con ceros]
Número[(m[,d])][Sin firmar][Relleno con ceros] Sinónimos de decimal.
Fecha. El rango admitido es "1000-01-01" a "9999-12-31".
MySQL muestra valores de fecha en formato "AAAA-MM-DD", pero le permite asignar valores a columnas de fecha como cadenas o números. Consulte el Capítulo 6.2.2.2 Tipos de fecha, fecha y marca de tiempo.
La fecha y hora es una combinación de fecha y hora. El rango admitido es "1000-01-01 00:00" a "9999-12-31 23:59:59". MySQL muestra valores de fecha y hora en el formato "AAAA-MM-DD HH:MM:SS" pero le permite asignar valores a las columnas de fecha y hora como cadenas o números. Consulte el Capítulo 6.2.2.2 Tipos de fecha, fecha y marca de tiempo.
Marca de tiempo [(M)] marca de tiempo. El rango es cualquier momento desde "1970-01-01 00:00:00" hasta 2037. En MySQL 4.0 y versiones anteriores, los valores de marca de tiempo se muestran en el formato AAAAMMDDHHMMSS, AAAAMMDDHHMMSS, AAAAMMDD o AAAAMMDD, dependiendo de si m es 14 (u omitido), 12, 8 o 6, pero puede especificar la columna de marca de tiempo como Cadena o número. A partir de MySQL 4.1, las marcas de tiempo se devuelven como caracteres en el formato "AAAA-MM-DD HH:MM:DD". Si desea devolverlo como un número, debe agregar +0 después del campo de marca de tiempo. No se admiten marcas de tiempo de diferentes longitudes. A partir de MySQL 4.0.12, es posible utilizar la opción -new para que el servidor se comporte como 4.1. La columna TIMESTAMP es útil para registrar la fecha y hora de una operación de inserción o actualización, porque si no le asigna un valor usted mismo, se establecerá automáticamente en la fecha y hora de la última operación. También puede configurarlo en la fecha y hora actuales dándole un valor nulo. Consulte el Capítulo 6.2.2 Tipos de fecha y hora. El parámetro m solo afecta el formato de visualización de la columna de marca de tiempo; su valor siempre ocupa 4 bytes de espacio de almacenamiento. Tenga en cuenta que devuelve un número cuando la columna de marca de tiempo (M) tiene M de 8 o 14, otras columnas de marca de tiempo (M) devuelven una cadena. Esto es solo para volcar y restaurar tablas de manera confiable a otros formatos. Consulte el Capítulo 6.2.2.2 Tipos de fecha, fecha y marca de tiempo. Tiempo, un tiempo. El rango es "-838:59:59" a "838:59:59". MySQL muestra valores de tiempo en el formato "HH:MM:SS" pero le permite asignar valores a columnas de tiempo usando cadenas o números. Consulte el Capítulo 6.2.2.3 Tipos de tiempo. AÑO [(2 | 4)] Año en formato de dos o cuatro dígitos (el valor predeterminado es cuatro dígitos). Los valores permitidos son 1901 a 2155,0000 (formato de año de cuatro dígitos) y 1970-2069 (70-69), utilizando formato de año de dos dígitos. MySQL muestra los valores del año en formato AAAA, pero le permite asignar valores a las columnas del año mediante cadenas o números. (Los tipos de año no son compatibles con versiones anteriores a MySQL 3.22.) Consulte el Capítulo 6.2.2.4 Tipos de año.
[NACIONAL]CHAR(M)[BINARIO] Las cadenas de longitud fija siempre se rellenan en el lado derecho con espacios cuando se almacenan hasta la longitud especificada. El rango de m es de 0 a 255 (de 1 a 255 antes de la versión 3.23 de MySQL). Los espacios finales se eliminarán cuando se recupere el valor. A menos que se especifique la palabra clave BINARY, los valores CHAR se ordenan y comparan según el juego de caracteres predeterminado, independientemente del caso. NATIONAL CHAR (NCHAR para abreviar) es una columna CHAR definida por ANSI SQL, que utilizará el juego de caracteres predeterminado. Esta es la configuración predeterminada en MySQL.
CHAR es la abreviatura de carácter. MySQL le permite crear columnas de tipo CHAR(0). Algunos programas más antiguos requieren una columna en tiempo de ejecución, pero no usan el valor de la columna, por lo que debe crear la columna para acomodarla. En este caso, CHAR(0) sería muy beneficioso. Cuando una columna solo necesita almacenar dos valores: uno es CHAR(0) (la columna no está definida como NOT NULL), esto solo ocupará un bit para almacenar dos valores: NULL o "". Consulte el Capítulo 6.2.3.65438 Tipos +0CHAR y VARCHAR. CHAR Este es un sinónimo de CHAR(1).
[NACIONAL] VARCHAR (M) [BINARIO] Una cadena de longitud variable. NOTA: Los espacios finales se eliminarán al guardar (esto es diferente de la convención ANSI SQL). El rango de m es de 0 a 255 (1 a 255 en versiones de MySQL anteriores a 4.0.2).
Los valores VARCHAR se ordenan y comparan sin distinguir entre mayúsculas y minúsculas, a menos que se especifique la palabra clave BINARY. Consulte Cambios implícitos en la definición de columnas en el Capítulo 6.5.3.1. VARCHAR es la abreviatura de variación de caracteres. Consulte el Capítulo 6.2.3.65438 Tipos +0CHAR y VARCHAR.
TINYBLOBTINYTEXT es una columna BLOB o de texto con una longitud máxima de 255 (2^8-1) caracteres. Consulte Cambios implícitos en la definición de columnas en el Capítulo 6.5.3.1. Consulte el Capítulo 6.2.3.2 BLOB y tipos de texto.
BLOBTEXT BLOB o columna de texto con una longitud máxima de 65535 (2 16-1) caracteres. Consulte Cambios implícitos en la definición de columnas en el Capítulo 6.5.3.1. Consulte el Capítulo 6.2.3.2 BLOB y tipos de texto.
MEDIUMBLOBMEDIUMTEXT es una columna BLOB o de texto con una longitud máxima de 1677 7215 (2 24-1) caracteres. Consulte Cambios implícitos en la definición de columnas en el Capítulo 6.5.3.1. Consulte el Capítulo 6.2.3.2 BLOB y tipos de texto.
Una columna BLOB o de texto con una longitud máxima de 4294967295 (2^32-1) caracteres. Consulte Cambios implícitos en la definición de columnas en el Capítulo 6.5.3.1. Tenga en cuenta que dado que los protocolos de servidor/cliente y las tablas MyISAM generalmente tienen un límite de 16 M por paquete de comunicación/fila de tabla, aún no puede usar todo el rango de este tipo. Consulte el Capítulo 6.2.3.2 BLOB y tipos de texto. Enum('Value1', 'Value2', ...) es un tipo de enumeración. Un objeto de cadena con un solo valor, seleccionado de la columna de valor "valor1", "valor2", ..., vacío o el valor de error especial "". Una columna de enumeración puede tener hasta 65535 valores diferentes. Consulte la Sección 6.2.3.3 Tipos de enumeración. SET('valor 1', valor2,...) establecer. Un objeto de cadena con cero o más valores, donde cada valor debe seleccionarse de las columnas de valores "valor1", "valor2",... Las columnas de colección pueden tener hasta 64 miembros. Consulte el Capítulo 6.2.3.4 Tipos de paquetes de instrumentos.
MySQL soporta todos los tipos numéricos ANSI/ISO SQL92. Estos tipos incluyen tipos de datos numéricos exactos (número, decimal, entero y entero pequeño) y tipos de datos numéricos aproximados (punto flotante, real y doble). La palabra clave INT es sinónimo de número entero y la palabra clave DEC es sinónimo de decimal.
MySQL implementa tipos numéricos y decimales como el mismo tipo, lo cual está permitido en el estándar SQL92. Se utilizan para almacenar valores donde la precisión es importante, como datos relacionados con el dinero. Al declarar una columna con uno de estos, puede (normalmente) especificar la precisión y el rango numérico, por ejemplo:
Salario Decimal (5, 2)
En este caso, 5; (precisión) representa el número importante de decimales y 2 (número de dígitos de datos) representa el número de dígitos después del punto decimal. Entonces, en este caso, la columna de salario puede almacenar valores que oscilan entre -99,99 y 99,99. (De hecho, MySQL puede almacenar valores hasta 999,99 en esta columna porque no almacena números positivos).
Nota del traductor:
El impacto de M y D en el rango de valores de los decimales (M, D)
Tipo de descripción del rango de valores (MySQL= 3.23)
Número decimal (4, 1) -9,9 a 99,9 -999,9 a 9999,9.
Número decimal (5, 1) -99,9 a 999,9 -9999,9 a 99999,9.
Número decimal (6, 1) -999,9 a 9999,9 -99999,9 a 999999,9.
Número decimal (6, 2) -99,99 a 999,99 -9999,99 a 99999,99
Número decimal (6, 3) -9,999 a 99,999 -999,999 a 9999,999.
#En MySQL 3.23 y versiones posteriores, el rango de valores de DECIMAL (M, D) es igual al rango de valores de DECIMAL (M+2, D) en versiones anteriores. Fin del comentario:
En ANSI/ISO SQL92, la sintaxis DECIMAL(p) es equivalente a DECIMAL(p, 0). De manera similar, la sintaxis DECIMAL es equivalente a DECIMAL(p, 0) dado el valor de decisión permitido p. MySQL actualmente no admite ninguna variante del tipo de datos decimal/numérico. En términos generales, esto no es un problema grave y las principales ventajas funcionales de estos tipos se pueden obtener controlando explícitamente la precisión y el rango numérico.
Los valores decimales y numéricos se almacenan como cadenas en lugar de números binarios de punto flotante para preservar la precisión decimal de estos valores. Utilice un carácter para cada dígito del valor, un punto decimal (si la escala > 1; 0) y un signo "-" (para valores negativos). Si el número de decimales es 0, los valores decimales y numéricos no contienen punto decimal ni parte decimal.
El rango máximo de valores DECIMALES y NUMÉRICOS es el mismo que DOBLE, pero para una columna DECIMAL o NUMÉRICA determinada, su rango real puede establecer la precisión de la columna o los límites de escala. Cuando el número de decimales asignados a dicha columna excede el valor especificado por la escala, la columna se redondea según la escala. Cuando el tamaño de una columna numérica o decimal determinada excede el rango límite especificado (o predeterminado) de precisión y escala, MySQL almacena el valor como el valor del punto final del rango de columnas.