В чем разница между tinyint, smallint, mediumint, bigint и int в MySQL?
В каких случаях их следует использовать?
В чем разница между tinyint, smallint, mediumint, bigint и int в MySQL?
В каких случаях их следует использовать?
Ответы:
Они занимают различное количество места и имеют разные диапазоны допустимых значений.
Вот размеры и диапазоны значений для SQL Server , другие РСУБД имеют аналогичную документацию:
Оказывается, все они используют одну и ту же спецификацию (с некоторыми незначительными исключениями, отмеченными ниже), но поддерживают различные комбинации этих типов (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
И они поддерживают одинаковые диапазоны значений (с одним исключением ниже) и имеют одинаковые требования к хранилищу:
| 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
Типы «unsigned» доступны только в 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.
Согласно документации они принимают:
И, естественно, принимать все более широкие диапазоны чисел.
Когда дело доходит до реального использования этих типов данных, очень важно, чтобы вы понимали, что использование определенных целочисленных типов может быть просто излишним или недостаточно используемым. Например, используя целочисленный тип данных для employeeCount в таблице, можно сказать, что сотрудник может быть излишним, поскольку он поддерживает диапазон целочисленных значений от ~ 2 миллиардов до 2 миллиардов или от 0 до 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;