Яка різниця між tinyint, smallint, mediumint, bigint та int в MySQL?


368

Яка різниця між tinyint, smallint, mediumint, bigint та int в MySQL?

У яких випадках їх слід використовувати?

Відповіді:


574

Вони займають різну кількість місця і мають різні діапазони прийнятних значень.

Ось розміри та діапазони значень для SQL Server , інші RDBMS мають аналогічну документацію:

Виявляється, всі вони використовують одну і ту ж специфікацію (за кількома незначними винятками, зазначеними нижче), але підтримують різні комбінації цих типів (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 

Типи "без підпису" доступні лише в MySQL, а решта просто використовують підписані діапазони, за одним помітним винятком: tinyintу SQL Server немає підпису та має діапазон значень від 0 до 255


21
Я не знав, що неподписані типи доступні лише в MySQL, це величезна перевага MySQL перед іншими RDBMS. Щось змінилося з дня опублікування цієї відповіді?
biox

3
@Daniel, що вони думають, чому існує один на 3 байти, а жоден на 6 байт?
Печер'є

9
@Pacerier, напевно, вони не знали, як це назвати :))
Mihai Matei

5
Вони повинні були називати цей біґінт, а замість бінтінта - гумогоніс.
MarioDS

5
greatint може бути варіантом, будучи Oracle американською компанією. :)
osiris

32

необхідний обсяг пам’яті та наскільки великі можуть бути цифри

на SQL Server

мініатюра 1 байт, від 0 до 255

малийв 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 байт


15

Це, здається, типи даних MySQL.

Відповідно до документації, яку вони беруть:

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

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


9

Коли ви переходите до використання цих типів даних у реальному світі, дуже важливо розуміти, що використання певних цілих типів може бути просто надмірним або недостатньо використаним. Наприклад, використовуючи цілий тип даних для dataCount в таблиці, скажімо, працівник може бути надмірним, оскільки він підтримує діапазон цілих значень від ~ від’ємних 2 мільярдів до позитивних 2 мільярдів або від нуля до приблизно 4 мільярдів (без підпису). Тож, навіть якщо ви вважаєте одного з найбільших роботодавців у США, такого як Walmart з приблизно приблизно 2,2 мільйонами співробітників, які використовують цілий тип даних для стовпця «StaffCount», було б непотрібним. У такому випадку ви, наприклад, використовуєте mediumint (який підтримує від 0 до 16 мільйонів (без підпису)). Сказавши, що якщо очікується, що ваш асортимент буде незвично великим, ви можете розглянути bigint, який ви можете побачити з Даніеля '


2
У вашому прикладі WalMart з 2,2-мільйонними активними працівниками - я б вважав, що при плинній кількості персоналу приблизно 50% щорічно тип INT на рівні EmployeeID буде мінімально необхідним. Що ти думаєш? Зрозуміло - для НАЙБІЛЬШИХ нормальних компаній тип INT був би НАДОБЛЕНОМ!
kiltannen

3

Різниця - це об'єм пам'яті, виділений кожному цілому числу, і те, наскільки велике число вони можуть зберігати.


2

Тип даних Діапазон зберігання

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;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.