MySQL 欄位類型約 25 種,大多直觀易懂,但 TEXT、DATE、SET、ENUM 及萬用字元有幾個關鍵細節必須釐清。
TEXT 實際是 LONG VARCHAR 或 MEDIUMTEXT 的別名| 類型 | 最大長度 | 儲存開銷 |
|---|---|---|
| TINYTEXT / TINYBLOB | 255 Bytes | 1 Byte |
| TEXT / BLOB | 64 KB | 2 Bytes |
| MEDIUMTEXT / MEDIUMBLOB | 16 MB | 3 Bytes |
| LONGTEXT / LONGBLOB | 4 GB | 4 Bytes |
YYYY-MM-DD,例:1999-12-08date("Y-m-d")$age = $current_date - $birthdate; -- 回傳整數天數
DATE_ADD、DATEDIFF、DATE_FORMAT 等函數| 特性 | ENUM | SET |
|---|---|---|
| 單列可存值數 | 1 個 | 多個 (0-64 個) |
| 預定義值上限 | 65,535 | 64 |
| 儲存方式 | 索引值 (1-2 Bytes) | 位元遮罩 (1-8 Bytes) |
| 查詢語法 | = 'value' | FIND_IN_SET('value', col) 或 col & 1 |
需超過 64 個選項?:拆分多個 SET 欄位,或改用正規化關聯表(查找表)。
| 符號 | 用途 | 範例 |
|---|---|---|
* | 選取所有欄位 | SELECT * FROM t |
% | 配對任意長度字串 (需搭配 LIKE) | WHERE name LIKE 'A%' |
_ | 配對單一字元 | WHERE code LIKE '__-__' |
關鍵差異:* 用於欄位清單(SELECT 子句),%/_ 用於字串比對(WHERE 子句)。
LIKE '%...%'(全表掃描),考慮全文索引ALTER TABLE,頻繁變動的選項建議用查找表掌握 TEXT/BLOB 階層、DATE 運算、SET/ENUM 位元邏輯、萬用字元語境差異,能寫出更精確、效能更好的 Schema 與查詢。