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

MySQL 資料型別完全指南:數值、日期、字串、枚舉/集合型別選擇原則與空間優化實戰

     編輯:MySQL 綜合教學

前言

合理選擇資料型別是資料庫設計的核心功夫,直接影響儲存空間、查詢效能、資料精度。本文系統整理 MySQL 主流型別特性、適用場景、選擇原則,助你設計高效精準的表結構。

一、數值型別

1. 整數型別 (精確、高效、首選)

型別儲存有號範圍無號範圍 (UNSIGNED)適用場景
TINYINT1 Byte-128 ~ 1270 ~ 255年齡、狀態碼、布林值、小型枚舉
SMALLINT2 Bytes-32,768 ~ 32,7670 ~ 65,535郵遞區號、中型計數、權限位元遮罩
MEDIUMINT3 Bytes-8.3M ~ 8.3M0 ~ 16.7M中等流水號、自增 ID (≤1600萬行)
INT / INTEGER4 Bytes-21.4億 ~ 21.4億0 ~ 42.9億通用自增 ID、外鍵、大計數
BIGINT8 Bytes-9.2京 ~ 9.2京0 ~ 1.8垓超大系統 ID、時間戳毫秒、科學計算

選擇原則:「夠用就好,越小越好」。1600萬行用 MEDIUMINT 省 10MB+ 空間,索引也更快。

2. 定點數:DECIMAL / NUMERIC (金額、價格必備)

  • 以字串形式儲存,每位數字 1 Byte (含小數點)
  • 優點:精確運算、無浮點誤差
  • 語法:DECIMAL(10,2) 共 10 位、小數 2 位
  • 適用:價格、金額、匯率、精度敏感欄位

3. 浮點數:FLOAT / DOUBLE (科學計算、非精確場景)

型別儲存精度最小絕對值
FLOAT4 Bytes~7 位有效數字1.17E-38
DOUBLE8 Bytes~15 位有效數字2.22E-308

民用系統極少用到,除非做科學計算、地理座標。

二、日期時間型別

型別儲存範圍精度適用場景
DATE3 Bytes1000-01-01 ~ 9999-12-31天生日、入職日期、純日期業務
TIME3 Bytes-838:59:59 ~ 838:59:59秒工時、時長、鬧鐘時間
DATETIME8 Bytes1000 ~ 9999 年秒建立時間、訂單時間、通用時間戳
TIMESTAMP4 Bytes1970 ~ 2038 年秒自動更新欄位、跨時區應用
YEAR1 Byte1901 ~ 2155年年份欄位、統計維度

關鍵差異:TIMESTAMP 隨時區變化、範圍較小、4 Bytes;DATETIME 固定時區、範圍大、8 Bytes。5.6.5+ 版本 DATETIME 也支援 DEFAULT CURRENT_TIMESTAMP。

三、字串型別

1. 定長 vs 變長:CHAR vs VARCHAR

特性CHAR(n)VARCHAR(n)
儲存方式固定 n 位元組 (右補空格)實際長度 + 1~2 位元組長度前綴
適用長度固定/差異極小 (MD5、UUID、身分證、股票代碼)長度變動大 (姓名、標題、描述、地址)
效能讀取快、易碎片儲存省、需額外長度字節

實戰判斷:股票代碼 (6位/4位混在) 用 CHAR(6) 比 VARCHAR(6) 更划算 (上海股多、定長優勢大於長度前綴成本)。

2. 大文本:TEXT 系列

型別最大長度長度前綴適用
TINYTEXT255 B1 B短備註、標籤
TEXT64 KB2 B文章內容、簡介
MEDIUMTEXT16 MB3 B長文、日誌
LONGTEXT4 GB4 B極大文檔、二進位序列化

四、枚舉與集合 (MySQL 獨有)

ENUM (單選):1-2 Bytes

gender ENUM('男','女','其他')  -- 僅 1 Byte,直接存 '男'/'女'
  • 最多 65,535 個成員
  • 內部存數字索引,查詢可用字串
  • 比 TINYINT 更語意化、防錯

SET (多選):1-8 Bytes

permissions SET('讀','寫','刪','管理')  -- 位元遮罩,可組合
  • 最多 64 個成員
  • 支援 FIND_IN_SET() 查詢
  • 替代多對多關聯表 (簡單場景)

選擇決策樹 (快速參考)

  1. 是數字嗎?→ 整數用最小夠用的 INT 系、金額用 DECIMAL、科學用 FLOAT/DOUBLE
  2. 是日期嗎?→ 純日期 DATE、純時間 TIME、通用 DATETIME、需時區/自動更新 TIMESTAMP
  3. 是字串嗎?→ 固定長 CHAR、變動 VARCHAR(≤255)、大文本 TEXT 系列
  4. 固定選項嗎?→ 單選 ENUM、多選 SET

總結

MySQL 型別選擇核心原則:精確用 DECIMAL、整數用最小 INT、字串分定變長、日期按精度/時區選、枚舉集合善用語意化。每個 Byte 省下來,乘以億級行數就是 TB 級節省,索引也更輕更快。好架構從好型別開始。

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