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

MySQL 數據類型全景圖:整數、浮點、定點、字符串、日期、枚舉集合選型指南

     編輯:MySQL 綜合教學

MySQL 列類型系統化選型參考

MySQL 支持數值、日期時間、字符串三大類型,每類含多個子類型。正確選型 = 空間最優 + 精度保證 + 查詢高效。

整數類型對照表

類型存儲有符號範圍無符號範圍典型場景
TINYINT1B-128 ~ 1270 ~ 255布爾值、狀態碼、極小計數
SMALLINT2B-32,768 ~ 32,7670 ~ 65,535小範圍計數、年齡、短整數
MEDIUMINT3B-8,388,608 ~ 8,388,6070 ~ 16,777,215中等計數、RGB 顏色值
INT / INTEGER4B-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295通用 ID、計數器、IP 存儲
BIGINT8B-9.22E18 ~ 9.22E180 ~ 1.84E19大數據 ID、時間戳毫秒、高精度計算

關鍵點:INT(M) 中 M 僅為顯示寬度(ZEROFILL 時補 0),不影響存儲範圍。非負場景優先 UNSIGNED 翻倍範圍。

浮點與定點:精度陷阱

類型存儲精度適用場景
FLOAT(M,D)4B~7 位有效數字科學計算、近似值、空間坐標
DOUBLE(M,D)8B~15 位有效數字高精度科學計算
DECIMAL(M,D) / NUMERIC變長精確(字符串存儲)金額、價格、比率、任何不可損失精度場景

鐵律:涉及金錢、精確比率,只能用 DECIMAL。FLOAT/DOUBLE 二進制無法精確表示 0.1 等十進制小數,會產生 0.30000000000000004 類誤差。

字符串類型選型矩陣

類型最大長度存儲特點適用場景
CHAR(M)255 字符定長,右側空格填充固定長度代碼:MD5、UUID、國標代碼
VARCHAR(M)65,535 字符變長,1-2B 存長度通用變長文本:名稱、描述、URL
TINYTEXT255 B不計入行長度限制極短文本
TEXT64 KB同上文章、日志、中等文本
MEDIUMTEXT16 MB同上長文本
LONGTEXT4 GB同上超大文本、文檔存儲
BINARY/VARBINARY同 CHAR/VARCHAR二進制字節流,無字符集加密數據、圖片哈希、序列化對象
BLOB 系列同 TEXT 系列二進制大對象文件存儲(不推薦,用對象存儲)

日期時間類型

類型存儲範圍特性
DATETIME8B1000-01-01 ~ 9999-12-31無時區,靜態時間點
TIMESTAMP4B1970-01-01 ~ 2038-01-19時區感知,自動更新(DEFAULT/ON UPDATE CURRENT_TIMESTAMP)
DATE3B1000-01-01 ~ 9999-12-31純日期
TIME3B-838:59:59 ~ 838:59:59純時間/時長
YEAR1B1901 ~ 2155年份

建議:業務時間用 TIMESTAMP(自動維護、節省空間),歷史/未來時間用 DATETIME。應用層統一 UTC 存儲,展示層轉時區。

特殊類型:ENUM 與 SET

  • ENUM:單選,最多 65,535 個值,內部存 SMALLINT 索引。缺陷:新增值需 DDL、默認值陷阱(非法值存空串)、數字插入被當索引處理。替代:TINYINT + 應用層字典/檢查約束。
  • SET:多選,最多 64 個成員,內部存 BIGINT 位掩碼。替代:關聯表或 JSON 字段(5.7+)。

IP 存儲最佳實踐


-- IPv4: INT UNSIGNED (4B)
INSERT INTO ip_log(ip) VALUES (INET_ATON('192.168.1.1'));  -- 3232235777
SELECT INET_NTOA(ip) FROM ip_log;  -- '192.168.1.1'

-- PHP 對接
$ipLong = sprintf("%u", ip2long('192.168.1.1'));  // 無符號
$ipStr = long2ip($ipLong);

按「功能滿足 → 空間最小 → 處理最高效 → 兼容性」優先級選型,是資深 DBA 與開發的共識。

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