Яка різниця між tinyint, smallint, mediumint, bigint та int в MySQL?
У яких випадках їх слід використовувати?
Яка різниця між tinyint, smallint, mediumint, bigint та int в MySQL?
У яких випадках їх слід використовувати?
Відповіді:
Вони займають різну кількість місця і мають різні діапазони прийнятних значень.
Ось розміри та діапазони значень для 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
необхідний обсяг пам’яті та наскільки великі можуть бути цифри
на 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 байт
Це, здається, типи даних MySQL.
Відповідно до документації, яку вони беруть:
І, природно, приймайте все більші діапазони чисел.
Коли ви переходите до використання цих типів даних у реальному світі, дуже важливо розуміти, що використання певних цілих типів може бути просто надмірним або недостатньо використаним. Наприклад, використовуючи цілий тип даних для dataCount в таблиці, скажімо, працівник може бути надмірним, оскільки він підтримує діапазон цілих значень від ~ від’ємних 2 мільярдів до позитивних 2 мільярдів або від нуля до приблизно 4 мільярдів (без підпису). Тож, навіть якщо ви вважаєте одного з найбільших роботодавців у США, такого як Walmart з приблизно приблизно 2,2 мільйонами співробітників, які використовують цілий тип даних для стовпця «StaffCount», було б непотрібним. У такому випадку ви, наприклад, використовуєте 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;