我应该存储Delphi TDateTIme,还是首先转换为Unix时间戳?或者mayeb eeven作为一个字符串?

我应该如何在MySql中声明该列?作为Double,或DateTime(如果我使用Unix时间戳,则为整数)?

Whta是“正确的”,或者如果我想能够显示带有“yyyy mm dd hh:mm:ss”(或类似)的字符串,并且能够通过比较两个值获得经过的时间,那么最简单的是什么?

顺便说一句,该程序将只用于一个tiemzone – 没有夏令时.

我很困惑,似乎无法在任何地方找到这个.任何有用的网址?

解决方法:

>

Should I be storing a Delphi TDateTIme, or perhaps convert to Unix timestamp first?

通常,您不应该这样做:数据库层中的数据类型应该自己有意义(尽可能),而不是依赖于您的应用程序来解释它们.作为@Jim DeLaHunt says,这使数据库能够根据需要从SQL轻松地操作/解释它们(并且还使您能够在将来轻松地从另一个应用程序代码库访问相同的数据).

MySQL有five temporal types,其中只有两个存储日期和时间:DATETIME和TIMESTAMP.

正如其他人所提到的那样,差异归结为你是否希望存储时区 – 尽管我发现这是一个令人困惑的方式:

> TIMESTAMP使用会话的time_zone变量将输入转换为UTC时间戳,然后再返回输出:它对于指定确切的时刻是有用的;

> DATETIME只是存储日期和时间而不考虑时区,就像拍摄日历和时钟的照片一样:它对于指定在全球同一当地时间发生的事件非常有用.

>

How should I declare the column in MySql? As a Double, or DateTime (or Integer if I use Unix timestamp)?

就像声明任何其他列一样,您可以在列名后指定相关数据类型.

请注意,TIMESTAMP具有其他功能,例如automatic update,如果需要,您可能希望在列声明中禁用它们.

>

Whta is “correct”, or what is easiest if I want to be able to display a string with “yyyy mm dd hh:mm:ss” (or similar) and also to be able to get an elapsed time from comparing two values?

使用上述时间类型之一,您将能够完成所有这些(根据需要使用date functions). TIMESTAMP和DATETIME类型的默认输出是“YYYY-MM-DD HH:MM:SS”格式的字符串.

特别是,比较两个值的“经过时间”可以通过MySQL的TIMEDIFF()函数获得:

SELECT TIMEDIFF(end, start) AS elapsed

FROM my_table