首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 列類型完整指南:數值、字符串、日期時間

     編輯:MySQL 資料庫相關知識

數值類型

整數類型

類型存儲有符號範圍無符號範圍
TINYINT1B-128 ~ 1270 ~ 255
SMALLINT2B-32,768 ~ 32,7670 ~ 65,535
MEDIUMINT3B-8,388,608 ~ 8,388,6070 ~ 16,777,215
INT4B-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295
BIGINT8B-9.22E18 ~ 9.22E180 ~ 1.84E19

顯示寬度 M:INT(5) 僅影響顯示格式(配合 ZEROFILL),不限制存儲範圍與空間。

浮點與定點類型

類型存儲精度說明
FLOAT4B單精度,約 7 位有效數字
DOUBLE8B雙精度,約 15 位有效數字
DECIMAL(M,D)M+2B精確定點數,字符串存儲,無圖誤差,適合財務

選型原則:整數優先用最小滿足範圍的類型;財務金額必用 DECIMAL;科學計算用 DOUBLE。

數值列屬性

  • UNSIGNED:禁止負數,擴大正數範圍。
  • ZEROFILL:左側補 0 至顯示寬度,隱含 UNSIGNED。
  • AUTO_INCREMENT:自增序列,僅整數列。
  • NULL / NOT NULL、DEFAULT。

字符串類型

定長與變長

類型最大長度存儲特點
CHAR(M)M 字符M 字符固定長度,右側空格填充
VARCHAR(M)M 字符L+1/2 字節變長,L 為實際長度

選擇建議:長度固定或近似用 CHAR(MyISAM 效率高);長度差異大用 VARCHAR 節省空間。表中任一列變長 → 全表行變長(CHAR<4 除外)。

大對象類型

類型最大長度存儲二進制/文本
TINYBLOB/TEXT255 BL+1二進制/非二進制
BLOB/TEXT64 KBL+2二進制/非二進制
MEDIUMBLOB/TEXT16 MBL+3二進制/非二進制
LONGBLOB/TEXT4 GBL+4二進制/非二進制

索引支持:MyISAM 5.0+、InnoDB 5.5+ 支持 BLOB/TEXT 前綴索引。定期 OPTIMIZE TABLE 減少碎片。

ENUM 與 SET

  • ENUM:單選,最多 65,535 個成員,內部按聲明順序編碼 1~n。
  • SET:多選,最多 64 個成員,內部位掩碼存儲(第 0 位對應首個值)。
  • 非法值插入 → 空字符串(ENUM)或忽略非法項(SET)。

字符集與校對規則

  • MySQL 4.1+ 支持列級字符集,按 列→表→庫→服務器 級聯查找。
  • 二進制字符串(BLOB、BINARY 屬性 CHAR/VARCHAR)按字節值比較,區分大小寫。
  • 非二進制字符串按字符集校對規則比較,通常不區分大小寫。
  • VARCHAR(20) 限制字節數而非字符數,多字節字符集實際字符數更少。

日期時間類型

類型範圍存儲零值格式
DATE1000-01-01 ~ 9999-12-313B0000-00-00YYYY-MM-DD
TIME-838:59:59 ~ 838:59:593B00:00:00HH:MM:SS
DATETIME1000-01-01 00:00:00 ~ 9999-12-31 23:59:598B0000-00-00 00:00:00YYYY-MM-DD HH:MM:SS
TIMESTAMP1970-01-01 00:00:01 ~ 2038-01-19 03:14:074B00000000000000YYYYMMDDHHMMSS
YEAR1901~2155 (4位) / 1970~2069 (2位)1B0000YYYY / YY

TIMESTAMP 自動特性

  • 插入 NULL → 當前時間戳。
  • 首個 TIMESTAMP 列:INSERT/UPDATE 不賦值 → 自動設為當前時間。
  • 顯式賦值 → 禁用自動特性。
  • 記錄「創建時間 + 最後修改時間」技巧:修改時間列放前面,創建時間列用 NOW() 顯式初始化。

兩位數年份轉換規則

  • 00~69 → 2000~2069
  • 70~99 → 1970~1999
  • 數值 0 → 0000(而非 2000)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved