В чем разница между 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.
по словам документация они принимают:
- тип tinyint = 1 байт
- smallint = 2 байта
- mediumint = 3 байт
- int = 4 байта
- тип 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;