jachguate Asked: 2020-11-03 07:27:46 +0800 CST 2020-11-03 07:27:46 +0800 CST 2020-11-03 07:27:46 +0800 CST 我应该在 mySQL 中使用 DateTime 或 TimeStamp 类型的字段吗? 772 我必须将日期和时间保存在典型事务应用程序的不同表中,我将在其中存储各种信息,例如: 每笔交易发生的日期和时间(发票、付款收据等) 未来事件的日期和时间,例如约会和预定交付 过去的日期,例如员工或员工子女的出生日期。 我对 MySQL 的经验很少,我不确定在每种情况下我应该选择哪种数据类型。 推荐什么,使用DateTime类型的字段或TimeStamp类型的字段,为什么? mysql 3 Answers Voted Best Answer Angel Angel 2020-11-03T09:57:01+08:002020-11-03T09:57:01+08:00 在这个 MySQL 文档的某个地方,它声明如下: http ://dev.mysql.com/doc/refman/5.7/en/datetime.html (英文链接) TIMESTAMP 的范围从 '1970-01-01 00:00:01' GMT 到 '09/01/2038 03:14:07' GMT。 当您需要同时包含日期和时间的值时使用 DATETIME。MySQL 以 'YYYY-MM-DD HH:MM:SS' 格式检索并显示 DATETIME 值。支持的范围是“01/01/1000 00:00:00”到“9999-12-31 23:59:59”。 从上述情况开始并考虑到这一点,您可以存储或感兴趣的数据范围可能会使您倾向于其中一种,例如,如果您使用抵押贷款,至少可以说,你今天很容易克服这个范围TIMESTAMP。 TIMESTAMP受时区设置/调整的影响。只要它DATETIME是恒定的。 TIMESTAMP是 4 个字节和DATETIME8 个字节,因此时间戳 ( TIMESTAMP) 在数据库中也更轻,索引速度更快。 鉴于以上所有情况,如果您想存储特定值“可能会更好”使用DATATIME,但如果您只想存储以跟踪可能的记录更改,您可能希望TIMESTAMP在记录更改时使用。 如果您在MySQL 5或以上工作,则 的值TIMESTAMP将从当前时区转换为 UTC almacenamiento,并从 UTC 转换回recuperación. 仅适用于 TIMESTAMP 数据类型。 (注意,如果我找到上面的链接,我会尝试把它放在这里) 我希望它对你有帮助。 Jorgesys 2020-12-02T09:35:34+08:002020-12-02T09:35:34+08:00 我应该在 mySQL 中使用 DateTime 或 TimeStamp 类型的字段吗? 这取决于您的要求,每种情况都有一定的考虑因素,例如每种情况可以支持的值范围。 DATETIME 考虑格式为:'YYYY-MM-DD HH:MM:SS'的日期时间值,支持的范围:'1000-01-01 00:00:00' a '9999-12-31 23:59:59' TIMESTAMP 也考虑日期和时间值,但有一个范围'1970-01-01 00:00:01' UTC a '2038-01-19 03:14:07' UTC. 更多信息: DATE、DATETIME 和 TIMESTAMP 类型。 对我们许多人来说可能显而易见的其他属性是自动初始化和更新到当前日期和时间。MySQL 中不允许使用默认为零的 TIMESTAMP 值。 Eduardo Hernández Sáenz 2022-06-18T16:37:47+08:002022-06-18T16:37:47+08:00 TimeStamp只有当您想确保在插入或更新记录时自动设置日期时,我才看到使用它的意义。 例如,如果你想保存一个事件的日期和时间,你可以这样定义它: CREATE TABLE `eventos` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `Evento` VarChar(50) NOT NULL DEFAULT '', `FechaHora` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`Id`) ); 请注意,在INSERT中您不包括该字段FechaHora。 INSERT INTO eventos(Evento) VALUES('Evento 0001'); SELECT * FROM eventos; ID 事件 日期时间 1 事件 0001 2021-06-17 18_20_06 更新的另一个例子: CREATE TABLE `productos` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `Nombre` VarChar(50) NOT NULL DEFAULT '', `Marca` VarChar(50) NOT NULL DEFAULT '', `Referencia` VarChar(50) NOT NULL DEFAULT '', `FechaModif` TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`Id`) ); INSERT INTO productos (Nombre, Marca, Referencia, FechaModif) VALUES ('MOUSE', 'GENIUS', 'X105', NOW()); SELECT * FROM productos; ID 姓名 牌 参考 日期修改 1 摩丝 天才 X105 2021-06-17 19:25:08 UPDATE productos p SET p.Referencia = 'X106' WHERE p.Id = 1; SELECT * FROM productos; ID 姓名 牌 参考 日期修改 1 摩丝 天才 X106 2021-06-17 19:26:42
在这个 MySQL 文档的某个地方,它声明如下: http ://dev.mysql.com/doc/refman/5.7/en/datetime.html (英文链接)
从上述情况开始并考虑到这一点,您可以存储或感兴趣的数据范围可能会使您倾向于其中一种,例如,如果您使用抵押贷款,至少可以说,你今天很容易克服这个范围
TIMESTAMP
。TIMESTAMP
受时区设置/调整的影响。只要它DATETIME
是恒定的。TIMESTAMP
是 4 个字节和DATETIME
8 个字节,因此时间戳 (TIMESTAMP
) 在数据库中也更轻,索引速度更快。鉴于以上所有情况,如果您想存储特定值“可能会更好”使用
DATATIME
,但如果您只想存储以跟踪可能的记录更改,您可能希望TIMESTAMP
在记录更改时使用。如果您在
MySQL 5
或以上工作,则 的值TIMESTAMP
将从当前时区转换为 UTCalmacenamiento
,并从 UTC 转换回recuperación
. 仅适用于 TIMESTAMP 数据类型。(注意,如果我找到上面的链接,我会尝试把它放在这里)
我希望它对你有帮助。
这取决于您的要求,每种情况都有一定的考虑因素,例如每种情况可以支持的值范围。
更多信息: DATE、DATETIME 和 TIMESTAMP 类型。
对我们许多人来说可能显而易见的其他属性是自动初始化和更新到当前日期和时间。MySQL 中不允许使用默认为零的 TIMESTAMP 值。
TimeStamp
只有当您想确保在插入或更新记录时自动设置日期时,我才看到使用它的意义。例如,如果你想保存一个事件的日期和时间,你可以这样定义它:
请注意,在INSERT中您不包括该字段
FechaHora
。更新的另一个例子: