在 MySQL 客戶端中,快速獲取當前連線用戶、系統日期、時間資訊是除錯、審計、時區驗證的常見需求。本文整理標準函數與實戰輸出範例。
| 需求 | 函數 | 回傳型別 | 範例輸出 |
|---|---|---|---|
| 當前登入用戶 (含主機) | USER() / CURRENT_USER() | VARCHAR | root@localhost / app_user@% |
| 當前日期 | CURRENT_DATE() / CURDATE() | DATE | 2024-01-15 |
| 當前時間 | CURRENT_TIME() / CURTIME() | TIME | 14:30:45 |
| 當前日期時間 | NOW() / SYSDATE() / CURRENT_TIMESTAMP() | DATETIME | 2024-01-15 14:30:45 |
USER():回傳**客戶端實際連線時指定的用戶名與主機**,不受權限系統解析影響。mysql -u root -h 127.0.0.1 連線 → root@127.0.0.1CURRENT_USER():回傳**MySQL 權限系統實際認證通過的用戶帳號** (經過主機通配符匹配、代理用戶解析)。root@localhost → root@localhostNOW():回傳**語句開始執行時的固定時間點**,同一語句多次呼叫結果相同。支援複制 (Binlog 記錄固定值)。SYSDATE():回傳**函數實際執行瞬間的真實時間**,同一語句多次呼叫可能不同。不支援 Statement 格式複制 (需 Row 格式)。C:\> mysql -u root -p
Enter password: ********
Welcome to the MySQL monitor...
mysql> SELECT USER(), CURRENT_USER();
+------------------+------------------+
| USER() | CURRENT_USER() |
+------------------+------------------+
| root@localhost | root@localhost |
+------------------+------------------+
mysql> SELECT CURDATE(), CURTIME(), NOW();
+------------+-----------+---------------------+
| CURDATE() | CURTIME() | NOW() |
+------------+-----------+---------------------+
| 2024-01-15 | 14:30:45 | 2024-01-15 14:30:45 |
+------------+-----------+---------------------+
mysql> SELECT SYSDATE(), SLEEP(2), SYSDATE();
+---------------------+----------+---------------------+
| SYSDATE() | SLEEP(2) | SYSDATE() |
+---------------------+----------+---------------------+
| 2024-01-15 14:30:45 | 0 | 2024-01-15 14:30:47 | <-- 時間推進 2 秒
+---------------------+----------+---------------------+
mysql> SELECT NOW(), SLEEP(2), NOW();
+---------------------+----------+---------------------+
| NOW() | SLEEP(2) | NOW() |
+---------------------+----------+---------------------+
| 2024-01-15 14:30:47 | 0 | 2024-01-15 14:30:47 | <-- 時間固定
+---------------------+----------+---------------------+
執行結果示意圖:

-- 查看會話/全域時區
SELECT @@session.time_zone, @@global.time_zone;
-- 結果: SYSTEM / +08:00 / UTC 等
-- 當前會話設定時區
SET time_zone = '+00:00'; -- UTC
SELECT NOW(); -- 顯示 UTC 時間
-- 時間戳轉換 (應用層常用)
SELECT FROM_UNIXTIME(1705312245); -- 秒級時間戳轉 DATETIME
SELECT UNIX_TIMESTAMP(NOW()); -- DATETIME 轉秒級時間戳
MySQL 內建函數 USER()/CURRENT_USER()、CURDATE()/CURTIME()/NOW() 提供精確的連線身份與時間資訊。理解 USER() vs CURRENT_USER()、NOW() vs SYSDATE() 的語義差異,對於權限審計、複制一致性、跨時區應用至關重要。