常見誤區澄清
- TEXT 不是獨立資料類型,實際對應
LONG VARCHAR、MEDIUMTEXT 等長度變體。
DATE 日期類型
- 格式:
YYYY-MM-DD (如 1999-12-08)。
- PHP 取得當前日期:
date("Y-m-d")。
- 日期相減直接得天數差:
$age = $current_date - $birthdate; (MySQL 內建支援)。
SET 集合類型 vs ENUM 列舉類型
| 特性 | SET | ENUM |
| 儲存值數量 | 可同時儲存 **多個** 預定義值 (位元組合) | 只能儲存 **單一** 預定義值 |
| 最大預定義值數 | 64 個 | 65,535 個 |
| 適用場景 | 多選標籤、權限位遮罩 | 單選狀態、類型分類 |
超過 64 個集合值? 拆分為多個 SET 欄位組合使用。
SQL 萬用字元 (Wildcards)
| 萬用字元 | 用途 | 配合運算子 | 範例 |
% | 比對任意長度字串 (含零長度) | LIKE / NOT LIKE | WHERE name LIKE 'a%' (以 a 開頭) |
_ (底線) | 比對 **單一** 任意字元 | LIKE / NOT LIKE | WHERE name LIKE '___' (剛好 3 字元) |
* | 比對 **所有欄位** (投影) | SELECT | SELECT * FROM table |
關鍵差異總結
% 用於 **值比對** (需配合 LIKE);* 用於 **欄位投影** (配合 SELECT)。
_ 比對單一字元,% 比對任意長度。
- 標準 SQL 模式比對 **預設不區分大小寫** (依定序)。
範例查詢
-- 所有記錄
SELECT * FROM users WHERE username LIKE '%';
-- 以 'John' 開頭
SELECT * FROM users WHERE username LIKE 'John%';
-- 含 'admin' 任意位置
SELECT * FROM users WHERE username LIKE '%admin%';
-- 剛好 5 字元
SELECT * FROM users WHERE username LIKE '_____';