Maw*_*awg 3 mysql delphi datetime
我应该存储Delphi TDateTIme,还是首先转换为Unix时间戳?或者mayeb eeven作为一个字符串?
我应该如何在MySql中声明该列?作为Double,或DateTime(如果我使用Unix时间戳,则为整数)?
Whta是"正确的",或者如果我想能够显示带有"yyyy mm dd hh:mm:ss"(或类似)的字符串,并且能够通过比较两个值获得经过的时间,那么最简单的是什么?
顺便说一句,该程序将只用于一个tiemzone - 没有夏令时.
我很困惑,似乎无法在任何地方找到这个.任何有用的网址?
我应该存储Delphi TDateTIme,还是首先转换为Unix时间戳?
通常情况下,您既不应该这样做:数据库层中的数据类型应该自己有意义(尽可能),而不是依赖于您的应用程序来解释它们.正如@Jim DeLaHunt所说,这使数据库能够根据需要轻松地从SQL中操作/解释它们(并且还使您能够在将来轻松地从另一个应用程序代码库访问相同的数据).
MySQL有五种时间类型,其中只有两种存储日期和时间:DATETIME和TIMESTAMP.
正如其他人所提到的那样,差异归结为你是否希望存储时区 - 尽管我发现这是一个令人困惑的方式:
TIMESTAMP使用会话的time_zone变量将输入转换为UTC时间戳,然后再返回输出:它对于指定精确的时刻非常有用;
DATETIME 简单地存储日期和时间而不考虑时区,就像拍摄日历和时钟的照片一样:它对于指定在全球同一当地时间发生的事件非常有用.
我应该如何在MySql中声明该列?作为Double,或DateTime(如果我使用Unix时间戳,则为整数)?
就像声明任何其他列一样,您可以在列名后指定相关数据类型.
请注意,它TIMESTAMP具有其他功能,例如自动更新,如果需要,您可能希望在列声明中禁用它们.
Whta是"正确的",或者如果我想能够显示带有"yyyy mm dd hh:mm:ss"(或类似)的字符串,并且能够通过比较两个值获得经过的时间,那么最简单的是什么?
使用上述时间类型之一,您将能够执行所有这些操作(根据需要使用日期函数).TIMESTAMP和和DATETIMEtypes 的默认输出是'YYYY-MM-DD HH:MM:SS'格式的字符串.
特别是,比较两个值的"经过时间"可以通过MySQL的TIMEDIFF()函数获得:
SELECT TIMEDIFF(end, start) AS elapsed
FROM my_table
WHERE ...
Run Code Online (Sandbox Code Playgroud)