¿Cuál es la diferencia entre tinyint, smallint, mediumint, bigint e int en MySQL?
¿En qué casos se deben usar?
¿Cuál es la diferencia entre tinyint, smallint, mediumint, bigint e int en MySQL?
¿En qué casos se deben usar?
Respuestas:
Ocupan diferentes cantidades de espacio y tienen diferentes rangos de valores aceptables.
Estos son los tamaños y rangos de valores para SQL Server , otros RDBMS tienen documentación similar:
Resulta que todos usan la misma especificación (con algunas excepciones menores que se mencionan a continuación) pero admiten varias combinaciones de esos tipos (Oracle no está incluido porque solo tiene un NUMBER
tipo de datos, consulte el enlace anterior):
| SQL Server MySQL Postgres DB2
---------------------------------------------------
tinyint | X X
smallint | X X X X
mediumint | X
int/integer | X X X X
bigint | X X X X
Y admiten los mismos rangos de valores (con una excepción a continuación) y todos tienen los mismos requisitos de almacenamiento:
| Bytes Range (signed) Range (unsigned)
--------------------------------------------------------------------------------------------
tinyint | 1 byte -128 to 127 0 to 255
smallint | 2 bytes -32768 to 32767 0 to 65535
mediumint | 3 bytes -8388608 to 8388607 0 to 16777215
int/integer | 4 bytes -2147483648 to 2147483647 0 to 4294967295
bigint | 8 bytes -9223372036854775808 to 9223372036854775807 0 to 18446744073709551615
Los tipos "sin firmar" solo están disponibles en MySQL, y el resto solo usa los rangos firmados, con una excepción notable: tinyint
en SQL Server no está firmado y tiene un rango de valores de 0 a 255
el tamaño de almacenamiento requerido y qué tan grandes pueden ser los números
en SQL Server
tinyint 1 byte, 0 a 255
smallint 2 bytes, -2 ^ 15 (-32,768) a 2 ^ 15-1 (32,767)
int 4 bytes, -2 ^ 31 (-2,147,483,648) a 2 ^ 31-1 (2,147,483,647)
bigint 8 bytes, -2 ^ 63 (-9,223,372,036,854,775,808) a 2 ^ 63-1 (9,223,372,036,854,775,807)
puede almacenar el número 1 en los 4, pero un bigint usará 8 bytes mientras que un tinyint usará 1 byte
Esos parecen ser tipos de datos MySQL.
Según la documentación que llevan:
Y, naturalmente, acepte rangos de números cada vez más grandes.
Cuando se trata del uso en el mundo real de estos tipos de datos, es muy importante que comprenda que usar ciertos tipos de enteros podría ser una exageración o un uso insuficiente. Por ejemplo, el uso de un tipo de datos entero para employeeCount en una tabla indica que el empleado podría ser una exageración ya que admite un rango de valores enteros desde ~ 2 mil millones negativos a 2 mil millones positivos o cero a aproximadamente 4 mil millones (sin signo). Por lo tanto, incluso si considera que uno de los empleadores más grandes de los EE. UU., Como Walmart, con aproximadamente 2.2 millones de empleados que usan un tipo de datos entero para la columna employeeCount sería innecesario. En tal caso, utiliza mediumint (que admite de 0 a 16 millones (sin signo)), por ejemplo. Dicho esto, si se espera que su rango sea inusualmente grande, podría considerar bigint, que como puede ver en Daniel '
La diferencia es la cantidad de memoria asignada a cada número entero y la cantidad que pueden almacenar cada uno.
Tipo de datos Rango Almacenamiento
bigint -2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807) 8 Bytes
int -2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647) 4 Bytes
smallint -2^15 (-32,768) to 2^15-1 (32,767) 2 Bytes
tinyint 0 to 255 1 Byte
Ejemplo
El siguiente ejemplo crea una tabla utilizando los tipos de datos bigint, int, smallint y tinyint. Los valores se insertan en cada columna y se devuelven en la instrucción SELECT.
CREATE TABLE dbo.MyTable
(
MyBigIntColumn bigint
,MyIntColumn int
,MySmallIntColumn smallint
,MyTinyIntColumn tinyint
);
GO
INSERT INTO dbo.MyTable VALUES (9223372036854775807, 214483647,32767,255);
GO
SELECT MyBigIntColumn, MyIntColumn, MySmallIntColumn, MyTinyIntColumn
FROM dbo.MyTable;