MySQL 提供 CAST()、CONVERT() 以及隱式轉換,支援數值、字串、日期、二進制互轉。本文整理常用轉換模式與技巧。
| 函數 | 語法 | 標準 |
|---|---|---|
| CAST | CAST(expr AS type) | SQL 標準 |
| CONVERT | CONVERT(expr, type) 或 CONVERT(expr USING charset) | SQL 標準 / MySQL 擴展 |
| 類型關鍵字 | 含義 | 備註 |
|---|---|---|
| BINARY | 二進制字串 | 等同 CAST(expr AS BINARY),按字節比較 |
| CHAR[(N)] | 字符串 | 可指定長度 N |
| DATE | 日期 | YYYY-MM-DD |
| TIME | 時間 | HH:MM:SS |
| DATETIME | 日期時間 | YYYY-MM-DD HH:MM:SS |
| DECIMAL[(M[,D])] | 精確定點數 | M 總位數,D 小數位 |
| SIGNED [INTEGER] | 有符號整數 | INT 範圍 |
| UNSIGNED [INTEGER] | 無符號整數 | BIGINT 範圍 |
-- 方式 1:CAST
SELECT CAST(123 AS CHAR); -- '123'
-- 方式 2:CONCAT(最常用技巧)
SELECT CONCAT(123, ''); -- '123'
SELECT CONCAT(8, '0'); -- '80' (拼接字串)
-- 方式 3:CONVERT
SELECT CONVERT(123, CHAR);
SELECT CAST('123' AS SIGNED); -- 123
SELECT CAST('123.45' AS DECIMAL(10,2)); -- 123.45
SELECT CAST(a AS UNSIGNED) FROM t; -- 列轉換
SELECT CAST('2023-10-15' AS DATE);
SELECT CAST('14:30:00' AS TIME);
SELECT CAST('2023-10-15 14:30:00' AS DATETIME);
SELECT DATE_FORMAT(NOW(), '%Y%m%d'); -- 格式化輸出字串
SELECT CONVERT('中文' USING utf8mb4);
SELECT CONVERT('中文' USING gbk);
SELECT '123' + 1 → 124SELECT CONCAT(123, 'abc') → '123abc'SELECT '10' > '2' → 1 (數字比較)風險: 隱式轉換可能導致索引失效(列發生隱式轉換)。建議顯式 CAST。
ORDER BY CAST(col AS UNSIGNED):數字字串按數值排序(而非字典序)。WHERE CAST(id AS CHAR) LIKE '100%':數字列按字串前綴匹配。INSERT ... SELECT CAST(col AS DECIMAL(10,2)):異構遷移時精度統一。