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

MySQL 數值類型完整對照表:存儲空間、範圍與選型指南

     編輯:MySQL 綜合教學

MySQL 數值類型完整對照與選型指南

選對數值類型 = 節省空間 + 提升性能 + 避免溢出。本文提供全類型存儲字節、有符號/無符號範圍、精度特性、選型決策表。

整數類型 (精確數值)

類型存儲 (字節)有符號範圍無符號範圍典型用途
TINYINT1-128 ~ 1270 ~ 255布爾標誌 (0/1)、極小枚舉、狀態碼
SMALLINT2-32,768 ~ 32,7670 ~ 65,535年齡、短整數計數、郵編
MEDIUMINT3-8,388,608 ~ 8,388,6070 ~ 16,777,215中等計數、RGB 顏色值 (0xFFFFFF)
INT / INTEGER4-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295通用整數首選、自增主鍵 (中小表)
BIGINT8-9.22e18 ~ 9.22e180 ~ 1.84e19大數據量自增主鍵、時間戳毫秒、雪花 ID

顯示寬度:INT(11) 中的 11 僅影響 ZEROFILL 時的顯示寬度,**不限制存儲範圍**。8.0 已棄用顯示寬度語法。

定點數類型 (精確小數,金融/價格必用)

類型語法存儲精度範圍說明
DECIMAL / NUMERICDECIMAL(M,D)≈ M/2 字節 (每 4 位數字 2 字節) + 小數點/符號M 最大 65,D 最大 30精確計算,字符串存儲,無浮點誤差
  • M = 總位數 (精度),D = 小數位數 (標度)。
  • 價格/金額推薦:DECIMAL(19,4) (支持萬億級、4 位小數) 或 DECIMAL(10,2) (億級、分)。
  • 避免用 FLOAT/DOUBLE 存金額:0.1 + 0.2 != 0.3。

浮點數類型 (近似數值,科學計算/坐標/指標)

類型存儲範圍 (近似)精度說明
FLOAT4 字節±1.17e-38 ~ ±3.40e38~7 位有效數字單精度,IEEE 754
DOUBLE / DOUBLE PRECISION / REAL8 字節±2.22e-308 ~ ±1.80e308~15-16 位有效數字雙精度,默認 REAL=DOUBLE
FLOAT(p)4/8 字節p≤24 用 FLOAT,p≥25 用 DOUBLEp 為二進制精度位非標準語法,慎用
  • 經緯度坐標推薦 DECIMAL(10,7) (米級) 或 DOUBLE (高精度計算)。
  • 科學計算、機器學習特徵值用 DOUBLE。

選型決策表

業務場景推薦類型理由
自增主鍵 (千萬級以下)INT UNSIGNED / BIGINT UNSIGNED4/8 字節,正數翻倍範圍
自增主鍵 (億級/分表)BIGINT UNSIGNED避免耗盡
狀態/類型/性別 (枚舉)TINYINT UNSIGNED1 字節,配合 CHECK/ENUM 约束
用戶年齡、庫存數量SMALLINT / MEDIUMINT UNSIGNED足夠範圍,節省空間
商品價格、訂單金額、帳戶餘額DECIMAL(19,4) / DECIMAL(10,2)精確無誤差
經緯度 (地圖應用)DECIMAL(10,7) / DOUBLE精度/計算平衡
溫度、傳感器讀數、評分FLOAT / DOUBLE近似計算可接受
Unix 時間戳 (秒)INT UNSIGNED4 字節,2106 年溢出 (注意)
毫秒/微秒時間戳BIGINT UNSIGNED8 字節,長期可用

常見屬性與陷阱

UNSIGNED
無符號,範圍翻倍,禁止負數。自增主鍵、計數器、ID 類強烈建議加 UNSIGNED。
ZEROFILL
自動補 0 顯示 (如 INT(5) ZEROFILL 插入 7 顯示 00007)、**隱含 UNSIGNED**。8.0 棄用,應用層格式化。
AUTO_INCREMENT
僅整數類型,配合主鍵/唯一鍵。插入 NULL/0 觸發自增。
溢出行為
整數溢出報錯 (Out of range);浮點數溢出變 ±INF;DECIMAL 截斷四捨五入 (按 D)。

查看類型信息

SHOW COLUMNS FROM `table_name`;
-- 或
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_TYPE, NUMERIC_PRECISION, NUMERIC_SCALE
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA='db' AND TABLE_NAME='table';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved