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

MySQL 數據類型選擇指南:數值、字符串、日期時間、二進制、枚舉、位類型深度解析

     編輯:MySQL 綜合教學

MySQL 數據類型選擇指南:數值、字符串、日期時間、二進制、枚舉、位類型深度解析

正確選擇數據類型是性能與存儲效率的基石。本文系統講解浮點/定點數、字符串(VARCHAR/CHAR/BINARY)、大對象(BLOB/TEXT)、枚舉、日期時間(DATETIME/TIMESTAMP)、位類型的存儲特性、適用場景、避坑指南及優化技巧。

一、數值類型:浮點 vs 定點

  • FLOAT(4B)/DOUBLE(8B):CPU 原生支持,計算快,近似值,適合科學計算、非精度敏感場景。
  • DECIMAL:MySQL 5.0+ 服務端實現高精度計算(每 4 字節存 9 位數字),DECIMAL(18,9) 佔 9 字節。精確計算首選(財務金額),但計算開銷大。
  • 技巧:大數據量財務場景可用 BIGINT 替代 DECIMAL,金額乘 10n 存整數(如萬分之一分乘 1000000),兼得精確與性能。

二、字符串類型

類型特點適用場景
VARCHAR變長,1-2 字節存長度,節省空間,UPDATE 可能產生碎片長度差異大、較少更新、UTF-8 多字節字符集
CHAR定長,自動填充/去除尾部空格,不易碎片極短固定長度(MD5、Y/N 狀態)、頻繁更新列
BINARY/VARBINARY存字節碼,填充 \0,按字節比較,區分大小寫、速度快二進制數據、需字節級比較場景

避坑:VARCHAR(5) 和 VARCHAR(200) 存 'hello' 磁盤空間相同,但內存臨表排序時會按定長分配,盡量定義最小足夠長度。

三、大對象類型

  • BLOB 族:二進制,無字符集/排序規則。
  • TEXT 族:字符,有字符集/排序規則。
  • InnoDB 超大值使用「外部存儲區」,行內存 1-4 字節指針。
  • 排序只看前 max_sort_length 字節,不可全長度索引,不可用索引消除排序。

四、枚舉 ENUM

  • 壓縮存儲:1-2 字節存整數映射,.frm 存映射表。
  • 按內部整數排序,非字符串順序。
  • 列表固定,增減需 ALTER TABLE,不適合頻繁變動集合。
  • 關聯查詢時 ENUM 與 CHAR/VARCHAR 關聯可能較慢(需轉換)。

五、日期時間

類型範圍存儲時區特殊屬性
DATETIME1001-9999 年8 字節無關無
TIMESTAMP1970-2038 年4 字節相關(顯示受時區影響)默認 NOT NULL,首列默認 CURRENT_TIMESTAMP,更新自動刷新

建議:優先用 TIMESTAMP(空間效率高、自動時間戳),跨時區業務用 DATETIME。微秒級需求可用 BIGINT 存微秒時間戳或 DOUBLE 存秒+小數,或改用 MariaDB。

六、位類型 BIT

  • 最大 64 位,視為字符串類型而非數字。
  • 檢索返回二進制字符串(如 b'00111001' 顯示 ASCII 57 即 '9'),數字上下文自動轉數字(57)。
  • 極易誤用,**大多數應用建議避免**,布爾值用 CHAR(0) 可存 NULL/空字符串表示 True/False。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved