【问题标题】:MySQL: should I use "date" and "time" fields when I already have a timestamp field?MySQL:当我已经有时间戳字段时,我应该使用“日期”和“时间”字段吗?
【发布时间】:2010-04-13 15:02:38
【问题描述】:

我有一个 MySQL 表,其中有一个“date_added”(日期)字段、“time_added”(时间)字段和“timestamp”(int)字段。

我后来发现无论如何我都可以将时间戳转换为日期或时间,那么这是否意味着我可以摆脱其他日期/时间字段并只保留时间戳?

提前致谢

【问题讨论】:

    标签: mysql date time timestamp


    【解决方案1】:

    在您描述的布局中,我认为没有理由拥有多个字段。您可以使用 DATETIME 列,或者,如果您喜欢 DB 魔术,可以使用 TIMESTAMP 列(不要将其与 unix 时间戳混淆)。可以将表中的第一个 TIMESTAMP 配置为自动更新。

    还值得注意的是,某些平台在使用 Unix 时间戳时允许非常窄的日期范围(存储 1970 年之前或 2038 年之后的日期可能会出现问题),而 MySQL 的 DATETIME 类型范围从 1000 年到 9999 年。

    http://dev.mysql.com/doc/refman/5.1/en/datetime.html

    【讨论】:

      【解决方案2】:

      是的!使用查询根据需要进行转换。

      【讨论】:

        【解决方案3】:

        是的,请记住 32 位时间戳将在 20 年后用完值。

        【讨论】:

          【解决方案4】:

          你能摆脱那些领域吗?是的。

          你应该摆脱那些领域吗?也许不会。

          如果您发现自己专门按日期或时间进行查询,则单独存储和索引它们比执行WHERE DATE(timestamp) = '01-01-2001' 之类的不可索引且效率低下的操作要高效得多。

          取决于对该表的查询。

          【讨论】:

          • 你总是可以做 WHERE timestamp = UNIX_TIMESTAMP('2001-01-01');或 WHERE 时间戳 = 124232324;如果您预先计算,两者都是可索引的。
          猜你喜欢
          • 1970-01-01
          • 2011-01-01
          • 1970-01-01
          • 2019-09-23
          • 2017-08-08
          • 1970-01-01
          • 1970-01-01
          • 2020-03-23
          • 2013-11-17
          相关资源
          最近更新 更多