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

MySQL 資料類型詳解:TEXT、DATE、SET、ENUM 與萬用字元使用指南

     編輯:MySQL 資料庫相關知識

MySQL 欄位類型約 25 種,大多直觀易懂,但 TEXT、DATE、SET、ENUM 及萬用字元有幾個關鍵細節必須釐清。

1. TEXT 不是獨立類型

  • TEXT 實際是 LONG VARCHAR 或 MEDIUMTEXT 的別名
  • 四種 BLOB/TEXT 階層:
    類型最大長度儲存開銷
    TINYTEXT / TINYBLOB255 Bytes1 Byte
    TEXT / BLOB64 KB2 Bytes
    MEDIUMTEXT / MEDIUMBLOB16 MB3 Bytes
    LONGTEXT / LONGBLOB4 GB4 Bytes
  • BLOB 二進位、TEXT 字元(有字元集/排序規則)

2. DATE 日期類型

  • 格式固定:YYYY-MM-DD,例:1999-12-08
  • PHP 取得當日:date("Y-m-d")
  • 日期可直接相減得天數:
    $age = $current_date - $birthdate;  -- 回傳整數天數
    
  • 支援 DATE_ADD、DATEDIFF、DATE_FORMAT 等函數

3. SET vs ENUM

特性ENUMSET
單列可存值數1 個多個 (0-64 個)
預定義值上限65,53564
儲存方式索引值 (1-2 Bytes)位元遮罩 (1-8 Bytes)
查詢語法= 'value'FIND_IN_SET('value', col) 或 col & 1

需超過 64 個選項?:拆分多個 SET 欄位,或改用正規化關聯表(查找表)。

4. 萬用字元

符號用途範例
*選取所有欄位SELECT * FROM t
%配對任意長度字串 (需搭配 LIKE)WHERE name LIKE 'A%'
_配對單一字元WHERE code LIKE '__-__'

關鍵差異:* 用於欄位清單(SELECT 子句),%/_ 用於字串比對(WHERE 子句)。

5. 實務建議

  • 避免在 WHERE 條件對 TEXT/BLOB 使用 LIKE '%...%'(全表掃描),考慮全文索引
  • ENUM/SET 修改定義需 ALTER TABLE,頻繁變動的選項建議用查找表
  • 日期運算優先用 MySQL 內建函數,避免應用層時區轉換錯誤

結語

掌握 TEXT/BLOB 階層、DATE 運算、SET/ENUM 位元邏輯、萬用字元語境差異,能寫出更精確、效能更好的 Schema 與查詢。

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