首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 整數類型詳解:TINYINT、SMALLINT、INT、BIGINT 範圍與選型指南

     編輯:MySQL 綜合教學

MySQL 提供四種有符號/無符號整數類型,存儲空間從 1 到 8 字節不等。選對類型不僅能節省磁盤與內存,還能避免溢出風險。本文通過二進制原理推導範圍,並給出實際業務選型建議。

一、 存儲空間與取值範圍對照表

類型存儲 (字節)有符號範圍無符號範圍
TINYINT1-128 ~ 1270 ~ 255
SMALLINT2-32,768 ~ 32,7670 ~ 65,535
MEDIUMINT3-8,388,608 ~ 8,388,6070 ~ 16,777,215
INT / INTEGER4-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295
BIGINT8-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,8070 ~ 18,446,744,073,709,551,615

二、 範圍推導原理(以 TINYINT 為例)

無符號:8 位全 0 = 0,全 1 = 255(2⁸-1)。
有符號:最高位為符號位(0 正、1 負),剩 7 位表示數值。最小值 1000 0000₂ = -128(補碼表示),最大值 0111 1111₂ = 127。其他類型同理擴展位數。

三、 業務場景選型建議

  • TINYINT:狀態碼、布爾標誌、枚舉值(如性別 0/1、訂單狀態 0~10)。
  • SMALLINT:小範圍計數器、年齡、郵編、短整數 ID。
  • MEDIUMINT:中等規模自增 ID、庫存數量、積分值。
  • INT:最通用的主鍵/外鍵類型,40 億範圍滿足 99% 業務自增需求。
  • BIGINT:分布式系統全局唯一 ID(Snowflake)、大文件偏移量、高精度時間戳、超大規模計數器。

四、 避坑指南

  1. 別用 INT(11) 限制長度:括號內數字僅影響 ZEROFILL 顯示寬度,不限制存儲範圍。
  2. 非負業務優先 UNSIGNED:同等空間下正數範圍翻倍,且避免負數污染數據。
  3. 主鍵慎用 BIGINT:除非預估超 40 億行,否則 INT 更省空間、索引更窄、Join 更快。
  4. 應用層做範圍校驗:防止寫入超出類型範圍導致截斷或報錯。

五、 快速驗證語句

-- 查看類型最大最小值
SELECT 
  CAST(-1 AS UNSIGNED) AS tinyint_unsigned_max,  -- 255
  CAST(-1 AS SIGNED)   AS tinyint_signed_min;    -- -128

選對整數類型,是數據庫_schema 設計中性價比最高的優化動作之一。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved