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

MySQL TEXT、DATE、SET 資料類型深度解析與通配符使用指南

     編輯:MySQL 資料庫相關知識

TEXT 類型澄清

TEXT 不是獨立資料類型,而是 LONG VARCHAR 或 MEDIUMTEXT 的別名。MySQL 實際支援四種文本類型:

類型最大長度儲存開銷
TINYTEXT255 字元長度 + 1 位元組
TEXT65,535 字元 (64 KB)長度 + 2 位元組
MEDIUMTEXT16,777,215 字元 (16 MB)長度 + 3 位元組
LONGTEXT4,294,967,295 字元 (4 GB)長度 + 4 位元組

DATE 日期類型

  • 格式:YYYY-MM-DD (如 1999-12-08)。
  • PHP 取得當前日期:date("Y-m-d")。
  • 日期減法:兩個 DATE 相減直接得天數差 (MySQL 自動轉型)。
SELECT DATEDIFF('2024-01-10', '2024-01-01'); -- 回傳 9
SELECT '2024-01-10' - '2024-01-01';        -- 同樣回傳 9 (隱含轉型)

SET 集合類型 vs ENUM 列舉類型

特性ENUMSET
值的數量單選 (僅一個)多選 (零到多個)
預定義值上限65,535 個64 個
儲存方式1~2 位元組 (索引值)1~8 位元組 (位元遮罩)
適用場景互斥狀態 (性別、狀態機)標籤、多重屬性 (技能、興趣)

SET 超過 64 個值怎麼辦?

拆分為多個 SET 欄位,或改用關聯表 (正規化設計):

-- 方案 A: 多 SET 欄位
skills_set1 SET('php','mysql','linux',...), -- 前 64 項
skills_set2 SET('python','docker','k8s',...), -- 後 64 項

-- 方案 B: 關聯表 (推薦,可擴充、可索引、可統計)
CREATE TABLE user_skills (user_id INT, skill VARCHAR(50), PRIMARY KEY(user_id, skill));

SQL 通配符完整說明

通配符用途配合關鍵字範例
*選取所有欄位SELECTSELECT * FROM users
%匹配任意長度字串 (含 0 字元)LIKEWHERE name LIKE 'A%'
_匹配**單一**任意字元LIKEWHERE code LIKE 'A_C' (匹配 ABC, AXC...)

關鍵差異

  • * 用於 欄位清單 (SELECT 子句)。
  • %、_ 用於 字串值比對 (WHERE 子句),必須搭配 LIKE。

實用範例

-- 找出姓「王」且名為兩個字的用戶
SELECT * FROM users WHERE name LIKE '王__';

-- 找出 email 以 gmail.com 結尾
SELECT * FROM users WHERE email LIKE '%@gmail.com';

-- 找出代碼格式為 A-數字-B (如 A-1-B, A-9-B)
SELECT * FROM products WHERE code LIKE 'A-_B';

效能提醒

  • LIKE 'xxx%' (前綴固定) 可使用索引,LIKE '%xxx' 或 LIKE '%xxx%' 會全表掃描。
  • 大量模糊搜尋建議使用 全文索引 (FULLTEXT) 或外部搜尋引擎 (Elasticsearch)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved