Oracle 和 MySQL 都提供了多種日期和時間數據類型,但它們在實現和功能上有一些差異。以下是兩者的主要日期類型對比:
Oracle 日期類型
- DATE
- 存儲日期和時間(精確到秒)
- 格式:YYYY-MM-DD HH24:MI:SS
- 示例:
TO_DATE('2023-11-15 14:30:00', 'YYYY-MM-DD HH24:MI:SS')
- TIMESTAMP
- 比 DATE 更精確,可包含小數秒(最多9位)
- 示例:
TIMESTAMP '2023-11-15 14:30:00.123456789'
- TIMESTAMP WITH TIME ZONE
- 包含時區信息
- 示例:
TIMESTAMP '2023-11-15 14:30:00 -05:00'
- TIMESTAMP WITH LOCAL TIME ZONE
- 存儲時轉換為數據庫時區,檢索時轉換回用戶時區
- INTERVAL YEAR TO MONTH
- 存儲年-月間隔
- 示例:
INTERVAL '1-2' YEAR TO MONTH
?(1年2個月)
- INTERVAL DAY TO SECOND
- 存儲日-秒間隔
- 示例:
INTERVAL '5 12:30:45.123' DAY TO SECOND
?(5天12小時30分45.123秒)
MySQL 日期類型
- DATE
- 僅存儲日期(不包含時間)
- 格式:YYYY-MM-DD
- 示例:
'2023-11-15'
- TIME
- 僅存儲時間(可包含微秒)
- 格式:HH:MM:SS[.fraction]
- 示例:
'14:30:00'
?或?'14:30:00.123456'
- DATETIME
- 存儲日期和時間(精確到秒或微秒)
- 格式:YYYY-MM-DD HH:MM:SS[.fraction]
- 示例:
'2023-11-15 14:30:00'
?或?'2023-11-15 14:30:00.123456'
- TIMESTAMP
- 存儲日期和時間(1970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC)
- 自動轉換為 UTC 存儲,檢索時轉換回當前時區
- 示例:
TIMESTAMP(6)
?可存儲微秒
- YEAR
- 僅存儲年份(1901-2155)
- 示例:
YEAR(4)
?存儲為4位數年份
主要差異
- 精度:
- Oracle 的 TIMESTAMP 支持最多9位小數秒
- MySQL 的 DATETIME/TIMESTAMP 支持最多6位小數秒
- 時區處理:
- Oracle 有專門的時區感知類型(TIMESTAMP WITH TIME ZONE)
- MySQL 的 TIMESTAMP 會自動轉換時區,DATETIME 不會
- 范圍:
- Oracle DATE 范圍:公元前4712年到公元9999年
- MySQL TIMESTAMP 范圍較小(1970-2038年)
- 存儲:
- Oracle DATE 固定占用7字節
- MySQL DATETIME 占用8字節(無小數秒),TIMESTAMP 占用4字節(無小數秒)
示例用法
Oracle:
CREATE TABLE events (event_id NUMBER,event_date DATE,event_timestamp TIMESTAMP,event_tz TIMESTAMP WITH TIME ZONE
);
MySQL:
CREATE TABLE events (event_id INT,event_date DATE,event_datetime DATETIME(6),event_timestamp TIMESTAMP(6)
);
選擇哪種類型取決于您的具體需求,包括是否需要時區支持、所需精度以及數據范圍等因素。