Jam*_* P. 71 mysql datetime timestamp
我搜索过这个但没有明确的答案(特别是关于后者).在什么情况下你应该使用日期时间或时间戳?
Jay*_*ymz 66
假设您正在使用MS SQL Server(您不是,请参阅下面的更新):
一个表只能有一个时间戳列.每次插入或更新包含时间戳列的行时,都会更新timestamp列中的值.此属性使时间戳列成为键的不良候选者,尤其是主键.对该行进行的任何更新都会更改时间戳值,从而更改键值.如果列位于主键中,则旧键值不再有效,并且引用旧值的外键不再有效.如果在动态游标中引用该表,则所有更新都会更改游标中行的位置.如果列位于索引键中,则对数据行的所有更新也会生成索引的更新.
有关MSDN的信息
如果您需要针对某一行存储日期/时间信息,并且没有更改该日期/时间,请使用DateTime; 否则,使用时间戳.
另请注意: MS SQL Server时间戳字段不是Dates也不是Times,它们是数据更改时相对序列的二进制表示.
正如你已经更新说MySQL:
TIMESTAMP值从当前时区转换为UTC以进行存储,并从UTC转换回当前时区以进行检索.(这仅适用于TIMESTAMP数据类型,而不适用于其他类型,例如DATETIME.)
更值得注意的是:
如果存储TIMESTAMP值,然后更改时区并检索该值,则检索的值与您存储的值不同.
因此,如果您跨时区使用应用程序,并且需要日期/时间来反映单个用户设置,请使用时间戳.如果无论时区如何都需要一致性,请使用Datetime
Jai*_*Jai 30
请参阅我应该使用字段'datetime'还是'timestamp'? 它全面覆盖了该主题.
编辑 - 只是总结MySQL的属性和我的经验 -
时间戳 -
a)每列4个字节(与日期时间相比为8个字节)
b)内部存储为整数
c)有时区信息!
d)所有DATE()/ DAY()/ MONTH()函数都适用于TIMESTAMP和DATETIME
e)在MySQL中,每个表可以有多个TIMESTAMPS
f)表中的第一个TIMESTAMP会自动更新...
我已将多个时间戳用于其他目的..需要节省空间(必须非常小心并记住所有这些问题.
我的建议,只有当你知道你正在做什么时,才会把TIMESTAMP用于非时间戳目的......如果SPACE是一个巨大的问题(我的例如 - 15,000,000行和不断增长的8个日期时间!))
| 归档时间: |
|
| 查看次数: |
73400 次 |
| 最近记录: |