【问题标题】:MySQL - Single DATETIME or Separate DATE and TIME Columns?MySQL - 单个 DATETIME 还是单独的 DATE 和 TIME 列?
【发布时间】:2012-08-13 08:35:20
【问题描述】:

在我的应用程序中,我正在开发一个用于创建“提醒”的功能。

提醒具有日期和时间。在我的应用程序中,我有一个创建/编辑提醒的表单 - 它有两个单独的字段来输入此信息:

<input type="text" name="date"></input> <!-- datepicker plugin -->

<input type="text" name="time"></input> <!-- timepicker plugin -->

现在,作为一项规则,每当我需要存储日期/时间时,我总是使用 DATETIME 列,但这是我第一次必须存储用户输入的日期/时间。

我认为最好有单独的 DATE 和 TIME 列,因为这样可以更容易地将数据插入/检索到我的应用程序。例如,我不必组合来自两个输入字段的值来创建单个值以插入到数据库中。同样,我不必将单个值拆分为两个值以在编辑模式下填充表单字段。

但另一方面,如果我使用一列,查询表会不会更容易?你怎么看?

【问题讨论】:

  • 除非您有重复的事件,否则单独的字段没有多大意义。

标签: php mysql


【解决方案1】:

您应该自下而上构建(数据库在底部)。不要考虑应用程序,只考虑数据库。现在,在数据库级别上什么是有意义的。日期时间。

所以你需要在应用程序级别编写额外的代码。

【讨论】:

  • 谢谢保罗。为什么 DateTime 更有意义?
  • 比较两个时间戳的数据库查询比单独比较日期和时间要容易,尤其是当您考虑确保将日期时间保存为 UTC 而不是本地时间时。
【解决方案2】:

请看

在 jQuery UI Datepicker 中添加 Timepicker

http://trentrichardson.com/examples/timepicker/

根据您的mysql格式转换您的日期时间并存储它

$mydate = strtotime($_POST['date']);
$myfinaldate = date("d-m-y", $mydate);

$mytime = strtotime($_POST['time']);
$myfinaltime = date("H:i:s", $mytime);

【讨论】:

    【解决方案3】:

    分隔列是不合逻辑的。您可以使用时间戳作为数据类型,并且可以使用 mktime 函数轻松解析日期和时间。

    【讨论】:

      【解决方案4】:

      这是否取决于您正在创建的系统。 如果您想存储 2038 年以后的日期,我会将日期时间和时间分开存储。

      【讨论】:

      • 至少在当前版本的mysql中,datetime列的有效值是'1000-01-01'到'9999-12-31',它的timestamp列是有限的到 2038 年之前的日期。
      【解决方案5】:

      如果您正在开发预约应用程序,一方面您需要知道为用户安排预约的日期和时间,另一方面,您需要将用户与医生的日程安排相匹配.您将医生的时间表保存在数据库中,并且您需要知道(除其他外)医生何时(在哪天)以及何时可用。让我们暂时忘记什么日子,首先关注时间安排…… 您需要制定一个可编程的时间表,以便您知道医生在特定日历年工作 6 个月。 (Jan - Jun),他或她可能工作(9-5 M,W,Fr)和(10-3 T,Th)。周六和周日医生休息。因此,您开发了一个表格来保存每日时间表,其中包含 2 列来保存一周中每一天的每日开始时间和每日结束时间。总共 14 列和一个主键和可能的辅助键。所以现在是一些日期算术的时候了(这是它变得毛茸茸的地方:-|...

      你可以说出你的查询:(mySQL)

      选择某某……

      doctorschedule_startime_tuesdaydoctorschedule_endime_tuesday 之间的 form.theapptdatetime

      这将进行匹配以查看您的日期时间是否在您的医生计划开始时间和结束时间的日期范围内...但是如果您只需要时间怎么办??

      如果时间值存储为日期时间,日期算术是否仍然有效???

      换句话说,如果我有 01:00:00 作为我的医生计划开始时间,这是我的算术工作的合法日期值,还是将一个日期部分强加给我。

      也许我应该将时间存储为 varchar,并将其转换为合适的日期时间值并在代码中执行算术而不是查询????

      【讨论】:

        【解决方案6】:

        我想到了一个关于何时分割日期和时间的例子:

        您可能希望 DATE 成为唯一索引的一部分,这样用户每个日期只能向某个表添加 1 条记录,但您仍然想知道他添加的 TIME,所以你把DATETIME分开。

        【讨论】:

          猜你喜欢
          • 2017-06-15
          • 2014-08-14
          • 1970-01-01
          • 1970-01-01
          • 2010-11-22
          • 2012-09-02
          • 1970-01-01
          • 2011-03-19
          • 1970-01-01
          相关资源
          最近更新 更多