MySQL 提供約 25 種資料類型,大多直觀易懂。但 TEXT、DATE、SET 等類型存在常見誤區,通配符用法也有講究,本文逐一釐清。
關鍵結論: TEXT 不是獨立資料類型,實際上是 LONG VARCHAR 或 MEDIUMTEXT 的同義詞。建表時建議顯式指定具體類型(TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT),避免歧義。
| 特性 | 說明 | 範例 |
|---|---|---|
| 標準格式 | YYYY-MM-DD | 1999-12-08 |
| PHP 獲取當前日期 | date("Y-m-d") | 返回字串格式 |
| 日期減法 | 直接相減得天數差 | $age = $current_date - $birthdate |
注意:日期減法返回整數天數,不適用於精確時間差計算,需用 DATEDIFF() 或 TIMESTAMPDIFF() 函數。
| 特性 | SET | ENUM |
|---|---|---|
| 值的數量 | 可儲存多個預定值(最多 64 個) | 單一值(最多 65,535 個預定義) |
| 儲存方式 | 位圖(bitmap) | 索引值 |
| 查詢函數 | FIND_IN_SET() | 直接比較 |
突破 64 個限制: 定義多個 SET 欄位組合使用,或改用 JSON 類型(MySQL 5.7+)、關聯表設計。
| 通配符 | 用途 | 搭配關鍵字 | 範例 |
|---|---|---|---|
* | 匹配欄位名(選取所有欄位) | SELECT | SELECT * FROM table |
% | 匹配欄位值(任意長度字串) | LIKE | WHERE name LIKE 'A%' |
_ | 匹配單個字符 | LIKE | WHERE code LIKE 'A_C' |
* 用於 SELECT 列表,代表「所有欄位」% 和 _ 用於 WHERE ... LIKE 條件,代表「值的模糊匹配」% 必須搭配 LIKE 使用,單獨使用無效DATEDIFF、DATE_ADD 等)