MySQL 中的 DATETIME 与 TIMESTAMP 的比较

Mehvish Ashiq 2024年2月15日
  1. DATETIMETIMESTAMP 的相似之处
  2. DATETIMETIMESTAMP 的区别
  3. 了解 MySQL 中 DATETIMETIMESTAMP 使用的示例
  4. 结论
MySQL 中的 DATETIME 与 TIMESTAMP 的比较

DATETIMETIMESTAMP 是两种不同的数据类型,可用于存储必须包含日期和时间部分的值。

在本文中,我们将了解它在数据库中的存储格式以及每种数据类型所需的内存。我们还将查看两种数据类型的异同,并尝试通过示例来理解。

DATETIMETIMESTAMP 的相似之处

DATETIMETIMESTAMP 有一些相似之处,如下所示:

  • 两者都存储相同类型的数据,具有两部分(日期和时间)。
  • 两者在查询时具有相同的格式。
  • 存储在数据库中的格式相同(YYYY-MM-DD hh:mm:ss)。
  • 两者都需要额外的字节来实现小数秒精度。
  • 每当更新记录时,两者都可以使用当前日期和时间更改数据。

DATETIMETIMESTAMP 的区别

DATETIMETIMESTAMP 有以下区别:

  • DATETIMETIMESTAMP 分别需要 5 个字节和 4 个字节。
  • TIMESTAMP 受时区影响,但 DATETIME 保持不变。
  • DATETIMETIMESTAMP 支持的范围是 '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 中 DATETIMETIMESTAMP 使用的示例

假设你在你的国家/地区经营一家咖啡店。每个客户在支付账单后都会收到一张发票​​。

除其他详细信息外,此发票还有日期和时间。由于你仅在你的所有客户都在同一时区的国家/地区经营商店,因此你将使用 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;

输出:

mysql 中的 datetime vs timestamp - date part a

现在,运行下面给出的代码并查看其输出。

SET time_zone = '-05:00';
SELECT DATE_TIME, TIME_STAMP from practice_datetime_and_timestamp;

输出:

mysql 中的 datetime 与时间戳-日期部分 b

你可能已经注意到 TIME_STAMP 列的时间已更改,但 DATE_TIME 的数据保持不变。

结论

在本次讨论中,我们得出结论,DATETIMETIMESTAMP 根据你的需要存储相同的数据。如果你希望你的数据受时区影响,请选择 TIMESTAMP。否则,最好使用 DATETIME

作者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook