如何最好地在MySql中存储日期/时间?
我应该先存储Delphi TDateTIme还是转换为Unix时间戳?或者可能是一根绳子 我应该如何在MySql中声明该列?作为Double或DateTime(如果使用Unix时间戳,则为整数) Whta是“正确的”,或者,如果我希望能够显示带有“yyyy-mm-dd hh:mm:ss”(或类似内容)的字符串,并且能够通过比较两个值获得经过的时间,那么最简单的方法是什么 顺便说一句,该程序将只在一个tiemzone中使用-该tiemzone没有夏令时 我很困惑,似乎在任何地方都找不到讨论这个问题的机会。有什么有用的URL吗?这可能对您有用。这取决于你是否想使用时区,但即使你现在不需要它们,如果将来不可能使用它们,也要重新考虑如何最好地在MySql中存储日期/时间?,mysql,delphi,datetime,Mysql,Delphi,Datetime,我应该先存储Delphi TDateTIme还是转换为Unix时间戳?或者可能是一根绳子 我应该如何在MySql中声明该列?作为Double或DateTime(如果使用Unix时间戳,则为整数) Whta是“正确的”,或者,如果我希望能够显示带有“yyyy-mm-dd hh:mm:ss”(或类似内容)的字符串,并且能够通过比较两个值获得经过的时间,那么最简单的方法是什么 顺便说一句,该程序将只在一个tiemzone中使用-该tiemzone没有夏令时 我很困惑,似乎在任何地方都找不到讨论这个问题
我会用DATETIME。它更容易被人阅读 我想让MySQL按照自己的意愿处理日期/时间,即作为datetime字段。它的范围很大(不受时代限制)
请参见此处:MySQL应该有一个本机日期格式,这是首选格式,因为这样可以使用SQL日期函数(年、月等)
在我的一个数据库表中,有一个字段被定义为Delphi datetime—回想起来,这是一个错误,因为很难在此字段上进行筛选或显示值。这两个操作都需要在调用程序中进行特殊处理,而不是在数据库中进行处理。您可以阅读中的MySQL日期和时间类型以及中的函数 根据我的经验,使用MySQL和SQL Server(尽管不是使用Delphi本身),您可以很好地将日期和时间值存储在数据库的日期和时间格式中。这使您可以使用数据库的日期和时间功能,并利用其日期和时间功能的优化实现。如果将日期时间值存储为双精度或整数Unix时间戳之类的通用值,则将缺少优化,并且必须实现自己的等效日期和时间函数 根据OP编辑的问题更新: 可以使用类似于
%Y%m%d%k:%i:%s“
的格式字符串为您提供类似“yyyy-mm-dd hh:mm:ss”的字符串
将为您提供一个时间间隔类型,给出两个日期时间值之间的差异
DATETIME
和TIMESTAMP
正如其他人所暗示的,区别在于您是否希望存储时区——尽管我发现这是一种令人困惑的看待方式:
使用会话变量将输入转换为UTC时间戳,然后再次转换为输出:它用于指定准确的时间点TIMESTAMP
只存储日期和时间而不考虑时区,就像拍摄日历和时钟的照片一样:它对于全局指定在同一本地时间发生的事件非常有用DATETIME
TIMESTAMP
具有附加功能,例如,如果需要,您可能希望在列声明中禁用这些功能TIMESTAMP
和DATETIME
类型的默认输出是'YYYY-MM-DD HH:MM:SS'
格式的字符串
特别是,比较两个值的“运行时间”可以通过MySQL函数获得:
选择TIMEDIFF(结束,开始)作为已用时间
从我的桌子上
哪里
有许多帖子描述了在mysql中保存datetime的最佳方法,例如 及 如果您决定将日期时间转换为Unix时间戳,并将其保存为整数 注意以下几点:
- Delphi函数DateTimeToUnix(strotdatetime('2013-11-22 16:34:45')
使用本地时区进行对话 - MYSQL函数UNIX_时间戳('2013-11-22 16:34:45') 使用GMT时区进行对话