Тип smallint, як правило, використовується, лише якщо місця на диску мало. Тип bigint призначений для використання, коли діапазон цілочисельного типу недостатній.
Обидва типи даних зберігаються як двійкові цілі числа зі знаком. Значення INTEGER мають 32 біти і можуть представляти цілі числа від –2 31–1 до 2 31–1. Значення SMALLINT мають лише 16 біт. Вони можуть представляти цілі числа від –32 767 до 32 767.
Різниця полягає виключно в максимальному значенні, яке можна зберегти (18,446,744,073,709,551,615 для bigint(20) і 4,294,967,295 для int(10), я вважаю), відповідно до деталей на сторінці довідника MySQL Numeric Types. До речі, використання (20) і (10) в основному не має значення, якщо ви не використовуєте ZEROFILL.
smallint більший за tinyint, але все ще відносно малий. Він підходить для програми, де діапазон значень перевищує діапазон tinyint, але недостатньо великий, щоб вимагати повного діапазону int .
Порівняння. Оскільки приведення між значеннями Number і BigInt може призвести до втрати точності, рекомендовано наступне: Використовуйте лише значення BigInt коли обґрунтовано очікуються значення, що перевищують 253. Не змінюйте значення BigInt і Number.