【问题标题】:MySQL - saving date and time as DATETIME vs as saving date and time as StringMySQL - 将日期和时间保存为 DATETIME 与将日期和时间保存为字符串
【发布时间】:2016-06-06 17:10:33
【问题描述】:

我需要存储一个由日期和时间组成的截止日期(例如 2016-05-02 19:02)。我目前正在使用一个以 DATETIME 作为数据类型的字段,但问题是它会自动将其保存为 2016-05-02 19:02:00。

作为一种解决方案,我正在考虑将日期保存在字符串字段中。

所以我想知道我是否应该这样做?任何性能优势/劣势?

【问题讨论】:

  • 不要将日期保存为字符串,您应该能够在 SQL 查询中仅获取日期而无需时间。您应该展示您的 SQL 查询的样子。
  • 我需要同时保存时间和日期。问题是,它在存储时增加了几秒钟
  • 存储的秒数有什么问题?约会就是这样。您将浪费时间将日期保存为字符串,尤其是在检索时。而且您将失去使用 BETWEEN 等运算符的能力。
  • 只是不喜欢存储不需要的秒数的想法。所以我开始怀疑将它保存为字符串是否更好。但是阅读您的论点,似乎并非如此,所以我想我会坚持使用 DATETIME。

标签: php mysql date datetime


【解决方案1】:

不要与数据库抗争。使用内置类型,除非您真的需要他们无法提供的东西(不过我认为这不太可能)。 (我的意思是您应该使用 TIME、DATE 或类似的时间和日期。然后您可以进行计算而无需转换值等)

如果您不需要秒数,则始终将它们保持为 00。

您是否使用 DATETIME、DATE & TIME 或 TIMESTAMP 取决于您如何使用数据。选择最适合您当前情况的替代方案。

【讨论】:

    【解决方案2】:

    正如另一个答案中提到的,您应该尽可能使用内置数据类型。

    在您的情况下,坚持使用DATETIME,然后使用DATE_FORMAT 函数将其转换为您在查询中需要的任何格式,如下所示:

    mysql> SELECT * FROM `mytable`;
    +----+---------------------+
    | id | mydatetime          |
    +----+---------------------+
    |  1 | 2016-06-06 14:12:00 |
    +----+---------------------+
    1 row in set (0.00 sec)
    
    mysql> SELECT DATE_FORMAT(`mydatetime`,'%b %d %Y %h:%i %p') AS `mydatetime` FROM `mytable`;
    +----------------------+
    | mydatetime           |
    +----------------------+
    | Jun 06 2016 02:12 PM |
    +----------------------+
    1 row in set (0.00 sec)
    

    参考: http://www.w3schools.com/sql/func_date_format.asp

    【讨论】:

      猜你喜欢
      • 2017-08-25
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 2011-09-08
      • 1970-01-01
      相关资源
      最近更新 更多