MySQL 提供兩個核心函數實現 Unix 時間戳(秒數)與 DATETIME/TIMESTAMP 類型的雙向轉換,廣泛用於前端交互、日志分析、跨時區存儲等場景。
| 函數 | 功能 | 輸入 | 輸出 |
|---|---|---|---|
UNIX_TIMESTAMP() | 日期時間 → 時間戳 | DATETIME/TIMESTAMP/日期字串 | 無符號整數(秒) |
FROM_UNIXTIME() | 時間戳 → 日期時間 | 整數秒數 | DATETIME 格式字串 |
-- 當前時間雙向轉換
SELECT
NOW() AS current_datetime,
UNIX_TIMESTAMP(NOW()) AS current_timestamp,
FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())) AS back_to_datetime;
-- 指定日期轉換
SELECT UNIX_TIMESTAMP('2024-01-15 12:30:45'); -- 1705302645
SELECT FROM_UNIXTIME(1705302645); -- 2024-01-15 12:30:45
-- 帶格式化輸出
SELECT FROM_UNIXTIME(1705302645, '%Y年%m月%d日 %H:%i:%s');
UNIX_TIMESTAMP 將輸入視為當前會話時區(@@session.time_zone)的時間,轉為 UTC 秒數。FROM_UNIXTIME 則將 UTC 秒數轉回會話時區時間。TIMESTAMP 列寫入時自動轉 UTC,讀出時轉回會話時區;DATETIME 不做時區轉換,原樣存取。SET time_zone='+00:00'),應用層按用戶時區展示。TIMESTAMP 已擴展至 64 位,但 FROM_UNIXTIME 參數若超出 32 位範圍在舊版本會返回 NULL。-- 批量更新:將 timestamp 列轉為 datetime 存儲 UPDATE logs SET dt_col = FROM_UNIXTIME(ts_col); -- 日期運算配合 SELECT DATE_ADD(FROM_UNIXTIME(ts), INTERVAL 1 DAY); -- 分組統計:按天聚合 SELECT DATE(FROM_UNIXTIME(create_ts)) AS day, COUNT(*) FROM orders GROUP BY day;