В чем разница между tinyint, smallint, mediumint, bigint и int в MySQL?

в чем разница между tinyint, smallint, mediumint, bigint и int в MySQL?

в каких случаях они должны использоваться?

6 ответов


они занимают разное количество пространства и имеют разные диапазоны допустимых значений.

вот размеры и диапазоны значений для SQL Server, другие RDBMSes имеют подобную документацию:

получается все они используют одну и ту же спецификацию (с несколькими незначительными исключениями, указанными ниже), но поддерживают различные комбинации этих типов (Oracle не включен, потому что он имеет только NUMBER тип данных, см. по ссылке выше):

              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

и они поддерживают одинаковые диапазоны значений (за одним исключением ниже), и все имеют одинаковые требования к хранению:

  • tinyint: 1 байт, -128 до +127 / 0 до 255 (без знака)
  • smallint: 2 байты, -32,768 до +32,767 / 0 до 65535 (без знака)
  • mediumint: 3 байт, -8,388,608 до 8,38,607 / 0 до 16,777,215 (без знака)
  • int/integer: 4 байт, -2,147,483,648 до +2,147,483,647 / 0 до 4,294,967,295 (без знака)
  • bigint: 8 байт, -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 / 0 до 18,446,744,073,709,551,615 (без знака)

в "неподписанные" типы доступны только в MySQL, а остальные просто используют подписанные диапазоны, с одним заметным исключением:tinyint В SQL Server без знака и имеет диапазон значений от 0 до 255


размер требуемого хранилища и насколько большими могут быть числа

на SQL Server

tinyint 1 байт, от 0 до 255

smallint 2 байта, -2^15 (-32,768) до 2^15-1 (32,767)

int 4 байта, -2^31 (-2,147,483,648) до 2^31-1 (2,147,483,647)

тип bigint 8 байт, -2^63 (-9,223,372,036,854,775,808) до 2^63-1 (9,223,372,036,854,775,807)

вы можете хранить номер 1 во всех 4, но bigint будет использовать 8 байтов, а tinyint будет использовать 1 байт


Это, похоже, типы данных MySQL.

по словам документация они принимают:

  1. тип tinyint = 1 байт
  2. smallint = 2 байта
  3. mediumint = 3 байт
  4. int = 4 байта
  5. тип bigint = 8 байт

и, естественно, принимать все более большие диапазоны чисел.


когда дело доходит до реального использования этих типов данных, очень важно, чтобы вы понимали, что использование определенных целочисленных типов может быть просто излишним или недостаточно используемым. Например, использование integer datatype для employeeCount в таблице say employee может быть излишним, поскольку он поддерживает диапазон целочисленных значений от ~ отрицательных 2 миллиардов до положительных 2 миллиардов или от нуля до приблизительно 4 миллиардов (без знака). Итак, даже если вы считаете одного из крупнейших работодателей США, таких как Walmart, с примерно 2,2 миллиона сотрудников, использующих целочисленный тип данных для столбца employeeCount, не понадобятся. В таком случае вы используете mediumint (который поддерживает от 0 до 16 миллионов (без знака)), например. Сказав, что если ожидается, что ваш диапазон будет необычно большим, вы можете рассмотреть bigint, который, как вы можете видеть из заметок Даниэля, поддерживает диапазон больше, чем я хочу расшифровать.


разница-это объем памяти, выделенный каждому целому числу, и то, насколько большое число они могут хранить.


тип данных диапазон хранения

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

пример

в следующем примере создается таблица с использованием типов данных bigint, int, smallint и tinyint. Значения вставляются в каждый столбец и возвращаются в инструкции 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;