gpt4 book ai didi

mysql - 如何最好地在 MySql 中存储日期/时间?

转载 作者:可可西里 更新时间:2023-11-01 07:46:11 24 4
gpt4 key购买 nike

我应该存储一个 Delphi TDateTIme,还是先转换为 Unix 时间戳?或者可能甚至是一个字符串?

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

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

顺便说一句,该程序只会在一个没有夏令时的时区内使用。

我很困惑,似乎无法在任何地方找到这个讨论。有什么有用的网址吗?

最佳答案

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

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

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

    正如其他人所暗示的那样,区别在于您是否希望存储时区 - 尽管我发现这种查看方式非常令人困惑:

    • TIMESTAMP 使用 session 的 time_zone将输入转换为 UTC 时间戳然后再返回输出的变量:它对于指定准确的时间非常有用;

    • DATETIME 只存储日期和时间,不考虑时区,就像拍摄日历和时钟的照片一样:它对于指定在全局同一本地时间发生的事件很有用.

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

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

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

  3. 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)。 TIMESTAMPDATETIME 类型的默认输出是 'YYYY-MM-DD HH:MM:SS' 格式的字符串。

    特别是,比较两个值的“耗时”可以通过 MySQL 的 TIMEDIFF() 获得。功能:

    SELECT TIMEDIFF(end, start) AS elapsed
    FROM my_table
    WHERE ...

关于mysql - 如何最好地在 MySql 中存储日期/时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13469154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com