MySQL 中的 DATETIME 与 TIMESTAMP 的比较
Mehvish Ashiq
2024年2月15日
DATETIME
和 TIMESTAMP
是两种不同的数据类型,可用于存储必须包含日期和时间部分的值。
在本文中,我们将了解它在数据库中的存储格式以及每种数据类型所需的内存。我们还将查看两种数据类型的异同,并尝试通过示例来理解。
DATETIME
和 TIMESTAMP
的相似之处
DATETIME
和 TIMESTAMP
有一些相似之处,如下所示:
- 两者都存储相同类型的数据,具有两部分(日期和时间)。
- 两者在查询时具有相同的格式。
- 存储在数据库中的格式相同(
YYYY-MM-DD hh:mm:ss
)。 - 两者都需要额外的字节来实现小数秒精度。
- 每当更新记录时,两者都可以使用当前日期和时间更改数据。
DATETIME
和 TIMESTAMP
的区别
DATETIME
和 TIMESTAMP
有以下区别:
DATETIME
和TIMESTAMP
分别需要 5 个字节和 4 个字节。TIMESTAMP
受时区影响,但DATETIME
保持不变。DATETIME
和TIMESTAMP
支持的范围是'1000-01-01 00:00:00'
到'9999-12-31 23:59:59'
和'1970-01-01 00:00:01'UTC
到'2038-01-19 03:14:07' UTC
。DATETIME
不能被索引,而TIMESTAMP
可以。- 带有
TIMESTAMP
的查询将被缓存,但DATETIME
不是这种情况。
了解 MySQL 中 DATETIME
和 TIMESTAMP
使用的示例
假设你在你的国家/地区经营一家咖啡店。每个客户在支付账单后都会收到一张发票。
除其他详细信息外,此发票还有日期和时间。由于你仅在你的所有客户都在同一时区的国家/地区经营商店,因此你将使用 DATETIME
。
让我们稍微改变一下这个场景;你现在在不同的国家有十家咖啡店,每个国家都有自己的时区。客户也会在那里收到发票,但是如何根据客户的时区显示日期和时间。
在这里你将使用 TIMESTAMP
。为什么?因为 TIMESTAMP
受时区影响,也就是说 TIMESTAMP
的值会从当前时区(服务器时间)转换为 UTC(通用时区)进行存储,再返回到当前时区(服务器时间) ) 关于检索。
示例代码:
请在你的 MySQL 中运行以下代码(我们在本教程中使用 MySQL 8.0.27)并查看代码后给出的输出。
#create schema
CREATE SCHEMA db_practice_datetime_timestamp;
#create table
CREATE TABLE practice_datetime_and_timestamp (
ID INT AUTO_INCREMENT PRIMARY KEY,
DATE_TIME DATETIME,
TIME_STAMP TIMESTAMP
);
#insert data
INSERT INTO practice_datetime_and_timestamp(TIME_STAMP,DATE_TIME)
VALUES(NOW(),NOW());
#read data
SELECT DATE_TIME, TIME_STAMP from practice_datetime_and_timestamp;
输出:
现在,运行下面给出的代码并查看其输出。
SET time_zone = '-05:00';
SELECT DATE_TIME, TIME_STAMP from practice_datetime_and_timestamp;
输出:
你可能已经注意到 TIME_STAMP
列的时间已更改,但 DATE_TIME
的数据保持不变。
结论
在本次讨论中,我们得出结论,DATETIME
和 TIMESTAMP
根据你的需要存储相同的数据。如果你希望你的数据受时区影响,请选择 TIMESTAMP
。否则,最好使用 DATETIME
。
作者: Mehvish Ashiq