Qual é a diferença entre tinyint, smallint, mediumint, bigint e int no MySQL?
Em que casos eles devem ser usados?
Qual é a diferença entre tinyint, smallint, mediumint, bigint e int no MySQL?
Em que casos eles devem ser usados?
Respostas:
Eles ocupam diferentes quantidades de espaço e têm diferentes faixas de valores aceitáveis.
Aqui estão os tamanhos e intervalos de valores para o SQL Server , outros RDBMSes possuem documentação semelhante:
Acontece que todos eles usam a mesma especificação (com algumas pequenas exceções mencionadas abaixo), mas suportam várias combinações desses tipos (Oracle não incluído porque possui apenas um NUMBER
tipo de dados, consulte o link acima):
| 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
E eles oferecem suporte aos mesmos intervalos de valores (com uma exceção abaixo) e todos têm os mesmos requisitos de armazenamento:
| 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
Os tipos "não assinados" estão disponíveis apenas no MySQL, e o restante apenas usa os intervalos assinados, com uma exceção notável: tinyint
no SQL Server não está assinado e possui um intervalo de valores de 0 a 255
o tamanho do armazenamento necessário e qual o tamanho dos números
no 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)
você pode armazenar o número 1 em todos os 4, mas um bigint usará 8 bytes enquanto um tinyint usará 1 byte
Esses parecem ser tipos de dados MySQL.
De acordo com a documentação que eles usam:
E, naturalmente, aceite intervalos cada vez maiores de números.
Quando se trata do uso no mundo real desses tipos de dados, é muito importante que você entenda que o uso de certos tipos inteiros pode ser apenas um exagero ou subutilização. Por exemplo, usando o tipo de dados inteiro para employeeCount em uma tabela, o funcionário pode ser um exagero, pois suporta um intervalo de valores inteiros de ~ 2 bilhões negativos a 2 bilhões positivos ou 2 bilhões positivos ou de zero a aproximadamente 4 bilhões (não assinado). Portanto, mesmo se você considerar um dos maiores empregadores dos EUA, como o Walmart, com cerca de 2,2 milhões de funcionários, usando um tipo de dados inteiro para a coluna employeeCount, seria desnecessário. Nesse caso, você usa mediumint (que suporta de 0 a 16 milhões (não assinado)) por exemplo. Dito isto, se se espera que seu alcance seja incomumente grande, você pode considerar bigint que, como pode ver em Daniel '
A diferença é a quantidade de memória alocada para cada número inteiro e qual o número que cada um pode armazenar.
Tipo de dados Intervalo de Armazenamento
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
Exemplo
O exemplo a seguir cria uma tabela usando os tipos de dados bigint, int, smallint e tinyint. Os valores são inseridos em cada coluna e retornados na instrução 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;