萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 整數類型詳解:TINYINT/SMALLINT/INT/BIGINT 範圍、儲存大小、顯示寬度誤區與 UNSIGNED 選擇指南

整數類型範圍與儲存對照表

類型儲存大小有號範圍無號範圍
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

顯示寬度 M 的真相:INT(M) 不影響儲存與範圍

  • INT(3)、INT(4)、INT(11) 在磁碟上佔用相同 4 位元組
  • M 僅用於顯示寬度(配合 ZEROFILL 左側補零),如 INT(5) ZEROFILL 存入 123 顯示為 00123
  • 應用層不應依賴 M 進行業務邏輯判斷

UNSIGNED 選擇指南

  • 業務絕無負值(ID、計數、長度、時間戳) → 加 UNSIGNED,獲得雙倍正向範圍
  • 可能有負值(溫差、收支、坐標) → 保持 SIGNED
  • 外鍵關聯欄位必須符號一致,否則報錯

常見誤區釐清

  1. 誤區:VARCHAR(500) 存 700 個字元會報錯
    真相:VARCHAR(500) 限制 500 字元,UTF-8 下中文佔 3 位元組,實際位元組長度可達 1500,不超過行長度 65535 即可。
  2. 誤區:INT(10) 能存 10 位數字
    真相:能存 10 位數字是因為 INT 範圍上限 2147483647 為 10 位,INT(3) 同樣能存 10 位數字。
  3. 誤區:BIGINT 比 INT 慢很多
    真相:64 位 CPU 下運算差異微乎其微,索引體積增大 2 倍才是主要代價。

選型建議

  • 主鍵 ID:BIGINT UNSIGNED AUTO_INCREMENT(防耗盡,順序寫入友好)
  • 狀態/類型/枚舉值:TINYINT UNSIGNED
  • 中等範圍計數:INT UNSIGNED
  • 大數值/精確金融(分為單位):BIGINT 或 DECIMAL
  • 空間極其敏感:評估 SMALLINT/MEDIUMINT 節省 1-2 位元組/行
copyright © 萬盛學電腦網 all rights reserved