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

MySQL 數據類型選型指南與建庫策略:從存儲空間到業務語義的完整考量

     編輯:MySQL 綜合教學

MySQL 數據類型深度選型:數值/日期/字符串/枚舉四大族系、空間效率與業務語義雙重視角

合理的類型選型是高性能、低存儲成本的基石。本文按數值、日期時間、字符串、枚舉/集合四大族系,從存儲字節、取值範圍、業務適用場景三個維度建立選型決策矩陣,並給出建庫實戰原則。

一、數值類型族系

類型字節有符號範圍無符號範圍典型場景
TINYINT1-128~1270~255年齡、狀態碼、布爾標誌
SMALLINT2-32768~327670~65535遊戲技能值、小型字典 ID
MEDIUMINT3-838萬~838萬0~1677萬中等規模表自增 ID(<1600萬行)
INT4-21億~21億0~42億通用自增 ID、大多數業務 ID
BIGINT8-9京~9京0~18京分布式 ID、海量數據主鍵
FLOAT4±1.17E-38 ~ ±3.4E38-科學計算、非精確測量
DOUBLE8±2.22E-308 ~ ±1.7E308-高精度科學計算
DECIMAL(p,s)p+2 約精確定點數-價格、金額、財務數據

選型鐵律

  1. 夠用即可:用戶年齡用 TINYINT,省 3 字節 vs INT
  2. 無符號優先:非負業務加 UNSIGNED,正數範圍翻倍
  3. 金額必用 DECIMAL:浮點數運算有誤差,DECIMAL(10,2) 精確到分
  4. 自增 ID 右尺:<1600萬行用 MEDIUMINT 省 1 字節/行,億級表節省 100MB+

二、日期時間類型

類型字節範圍精度場景
DATE31000-01-01 ~ 9999-12-31天生日、入職日期
TIME3-838:59:59 ~ 838:59:59秒每日定時任務時間
DATETIME81000 ~ 9999 年秒通用業務時間戳
TIMESTAMP41970 ~ 2038 年秒自動更新時間戳、跨時區
YEAR11901 ~ 2155年年份字典

關鍵差異:TIMESTAMP 存儲 UTC,讀取時按會話時區轉換;DATETIME 存原值。自動更新欄位首選 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。

三、字符串類型

類型存儲方式最大長度適用場景
CHAR(n)固定長度,右填充空格255 字節定長代碼:股票代碼、MD5、ISO 國家碼
VARCHAR(n)變長,1-2 字節長度前綴 + 內容65535 字節不定長文本:姓名、標題、描述
TINYTEXT1 字節長度前綴255 字節極短文本備註
TEXT2 字節長度前綴64 KB文章正文、日誌詳情
MEDIUMTEXT3 字節長度前綴16 MB長文檔、郵件內容
LONGTEXT4 字節長度前綴4 GB巨大文本、二進制序列化

CHAR vs VARCHAR 決策

  • 長度固定或差異極小 → CHAR(無長度前綴,CPU 友好)
  • 長度變化大 → VARCHAR(空間友好)
  • 實測:股票名稱多為 4 字(8 字節)→ CHAR(8) 最優;代碼滬深長度不同但滬市佔多數 → CHAR(6) 優於 VARCHAR(6)

四、枚舉與集合

類型存儲成員上限選擇模式典型場景
ENUM1-2 字節65535單選(必選一)性別、狀態機、優先級
SET1-8 字節64多選(可選零到多)標籤、權限位掩碼

亮點:ENUM('帥哥','美眉') 僅佔 1 字節,直接存字面值,比 TINYINT+映射表更直觀。

建庫策略總結

  1. 先定業務語義,再選最小足夠類型
  2. 數值優先無符號,金額強制 DECIMAL
  3. 字符串按長度分布選 CHAR/VARCHAR/TEXT
  4. 枚舉替代微型字典表,減少 JOIN
  5. 定期 ANALYZE TABLE 更新統計信息,助優化器決策
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved