6 ответов:
они занимают разное количество места и имеют разные диапазоны допустимых значений.
вот размеры и диапазоны значений для 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и они поддерживают одни и те же диапазоны значений (за одним исключением ниже) и все имеют одинаковые требования к хранению:
tinyint:1 байт, -128 до +127 / 0 до 255 (без знака)smallint:2 байты, -32,768 до +32,767 / 0 до 65535 (без знака)mediumint:3 байт, -8,388,608 до 8,388,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 байт
и, естественно, принимать все большие диапазоны чисел.
когда дело доходит до реального использования этих типов данных, очень важно, чтобы вы понимали, что использование определенных целочисленных типов может быть просто излишним или недостаточно используемым. Например, использование целочисленного типа данных для employeeCount в таблице говорит, что сотрудник может быть излишним, поскольку он поддерживает диапазон целочисленных значений от ~ отрицательных 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пример
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;
Comments