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

MySQL 資料類型完全指南:數值、日期時間、字串三大類型深度解析與選型建議

     編輯:MySQL 入門

MySQL 資料類型完全指南:數值、日期時間、字串三大類型深度解析與選型建議

欄位類型決定了儲存空間、數值範圍、精度、索引效能、查詢速度。選型失當會導致空間浪費、精度丟失、索引膨脹、甚至業務 Bug。本文系統梳理 MySQL 三大類型體系,提供實戰選型決策表。

一、數值類型

整數類型(精確)

類型 儲存 有號範圍 無號範圍 適用場景
TINYINT1 Byte-128 ~ 1270 ~ 255狀態碼、布爾、極小計數
SMALLINT2 Bytes-32,768 ~ 32,7670 ~ 65,535較小計數、年齡、短整數
MEDIUMINT3 Bytes-8,388,608 ~ 8,388,6070 ~ 16,777,215中等計數、IP 整數存儲
INT / INTEGER4 Bytes-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295通用 ID、計數器、自增主鍵首選
BIGINT8 Bytes-9.22e18 ~ 9.22e180 ~ 1.84e19極大 ID、時間戳毫秒、大數據主鍵

關鍵點:

  • INT(11) 括號內數字僅為顯示寬度,不影響儲存範圍,8.0 已棄用顯示寬度語法。
  • UNSIGNED 移除負數範圍,正數上限翻倍。自增主鍵建議加 UNSIGNED。
  • BIT(M) 存儲位向量,M=1~64,較少用。

定點數與浮點數

類型 儲存 精度/範圍 適用場景
DECIMAL(M,D) / NUMERICM+2 或 D+2 Bytes精確定點,M 總位數,D 小數位。最大 65 位金額、價格、比率、任何不能有誤差的數值
FLOAT4 Bytes單精度,~7 位有效數字,±3.4e38科學計算、近似值、不需精確的測量數據
DOUBLE8 Bytes雙精度,~15 位有效數字,±1.7e308高精度科學計算、GIS 座標

鐵律: 金額、價格、財務相關一律用 DECIMAL。FLOAT/DOUBLE 為二進制浮點,0.1 + 0.2 != 0.3,財務系統禁用。

二、日期時間類型

類型 儲存 範圍 格式 特性與適用場景
DATE3 Bytes1000-01-01 ~ 9999-12-31YYYY-MM-DD純日期:生日、入職日、訂單日期
TIME3 Bytes-838:59:59 ~ 838:59:59HH:MM:SS時間段、每日固定時間、持續時間
YEAR1 Byte1901 ~ 2155 (4位)YYYY年份:出生年、統計年份
DATETIME8 Bytes1000-01-01 00:00:00 ~ 9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS日期時間組合,無時區感知,應用層統一 UTC 存儲
TIMESTAMP4 Bytes1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTCYYYY-MM-DD HH:MM:SS時區感知,寫入自動轉 UTC,讀取轉會話時區。2038 年問題限制長期應用

DATETIME vs TIMESTAMP 選型決策

  • 需跨時區、長期存儲(超過 2038)、歷史/未來日期 → DATETIME(8 Bytes,無時區轉換開銷)。
  • 自動記錄創建/更新時間、範圍在 1970-2038、需時區感知 → TIMESTAMP(4 Bytes,自動維護)。
  • 8.0+ DATETIME 支援 DEFAULT CURRENT_TIMESTAMP、ON UPDATE CURRENT_TIMESTAMP,功能對齊 TIMESTAMP。

三、字串類型

定長 vs 變長

類型 最大長度 儲存特性 適用場景
CHAR(N)255 字符固定長度,不足右補空格,讀取時去除尾部空格(非 PAD_CHAR_TO_FULL_LENGTH 模式)定長代碼:MD5(32)、UUID(36)、國家代碼(2)、性別(1)、郵遞區號
VARCHAR(N)65,535 字符
(實際受行大小 65,535 限制)
變長,1-2 Bytes 長度前綴 + 實際內容,不補空格不定長文本:標題、姓名、郵箱、地址、JSON 片段

文本與二進制大對象

類型 最大長度 儲存 適用場景
TINYTEXT / TINYBLOB255 Bytes1 Byte 長度前綴極短文本/二進制
TEXT / BLOB64 KB2 Bytes 長度前綴文章內容、日誌、中等二進制
MEDIUMTEXT / MEDIUMBLOB16 MB3 Bytes 長度前綴長文檔、圖片、大型 JSON
LONGTEXT / LONGBLOB4 GB4 Bytes 長度前綴超大文檔、視頻、備份數據

關鍵差異: TEXT 有字符集、校對規則,按字符比較;BLOB 無字符集,按字節比較。儲存圖片/檔案建議用檔案系統/對象存儲,資料庫只存路徑。

ENUM 與 SET

  • ENUM('a','b','c'):單選,最多 65,535 個元素,儲存為 1-2 Bytes 數字索引。修改元素需 ALTER TABLE,不靈活,建議改用查找表(TINYINT FK)。
  • SET('a','b','c'):多選,最多 64 元素,儲存為位掩碼。同樣不建議用,改用關聯表或 JSON。

選型決策速查表

業務需求 推薦類型 避坑提醒
自增主鍵 / 通用 IDBIGINT UNSIGNED AUTO_INCREMENT預留未來擴展,避免 INT 耗盡
狀態碼 / 布爾TINYINT UNSIGNED不用 BOOL(同義 TINYINT(1)),明確語義
金額 / 價格 / 費率DECIMAL(19,4) 或 DECIMAL(10,2)嚴禁 FLOAT/DOUBLE
創建/更新時間戳DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP8.0+ 推薦;舊版用 TIMESTAMP 或應用層維護
用戶輸入短文本(<255)VARCHAR(255)實際業務長度設上限,別全開 65535
固定長度代碼CHAR(N)N 確定時比 VARCHAR 省空間、索引快
大文本內容TEXT 或 LONGTEXT超大考慮拆表或外部存儲
二進制檔案外部存儲(S3/OSS)+ 路徑 VARCHAR資料庫不存 BLOB,備份/複製/遷移極慢

效能影響總結

  1. 越小越好: 滿足業務範圍前提下,選儲存最小的類型(TINYINT < SMALLINT < INT < BIGINT)。
  2. 定長利索引: CHAR 固定長度,索引頁面更緊湊,定長欄位查詢更快。
  3. 避免 NULL: NULL 需額外位圖標記,索引統計複雜。能 NOT NULL 就 NOT NULL,給 DEFAULT。
  4. 字符集影響: utf8mb4 每字符最多 4 Bytes,VARCHAR(255) 實際最多 1020 Bytes + 2 Bytes 長度,單行超過 65,535 會報錯。

資料類型是資料庫設計的基因。精準選型 = 省空間 + 快查詢 + 少 Bug。將「金額用 DECIMAL、時間用 DATETIME、主鍵用 BIGINT UNSIGNED、文本用 VARCHAR、大檔外部存」刻入肌肉記憶,每一次建表都精準落地。

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