哪种MySQL数据类型用于调度?

时间:2011-10-30 11:40:23

标签: mysql database database-design sqldatatypes

我想记录在电影院播放的电影的开始和结束时间。我需要存储日期(例如2011年1月1日),开始时间(例如上午9:00)和结束时间(例如上午11点)。我应该使用DateTime吗?我已经看到一些实现,其中INT用于表示以分钟为单位的时间(例如,0 = 12午夜,1 = 12:01 am等)。我不确定使用INT over DateTime是否有某种好处。

建议?

编辑1:

如上所述扩展使用INT的想法,该表可能包含以下列:

  • 日期(例如2011年1月1日)
  • start_time(例如540 - 表示上午9点)
  • end_time(例如660 - 表示上午11点)

5 个答案:

答案 0 :(得分:5)

在我看来,一个人应该使用更适合和描述现实的数据类型。在这种情况下,我想使用Datetime

答案 1 :(得分:2)

对我来说更好的是使用DateTime列,因为INT有隐藏的解释。没有文档,你不知道它到底是什么:秒,分钟,月...... 这只是设计方法。

当使用DATETIME作为开始和结束字段时,考虑到“计算过程需要多长时间”时可能会遇到问题,因为您还应该考虑时区,夏令时等。

答案 2 :(得分:0)

使用DATETIMEINT

我更喜欢在unix时间戳(INT)中存储日期和时间,因为我可以在PHP函数中使用它,例如date

echo "Movie will start at ".date("H:i", $row['start_time']);

用它来操作很容易:

echo "Movie will start in ".(time() - $row['start_time'])." seconds";

当前日期和时间:http://www.unixtimestamp.com/

如果您想要将电影复制到第二天:

 $sql = "SELECT * FROM movies WHERE start_time >= ".strtotime("today 00:00")." AND start_time <= ".strtotime("today 23:59");

 // query..
 foreach($results as $row) {
    $new_start = strtotime("+1 day", $row['start_time'];    
    // insert
 }

答案 3 :(得分:0)

我会为两列使用'timestamp'。

Datetime使用4个字节,而Timestamp使用8个字节,因此效率更高。

时间戳的比较明显快于日期时间。

对于时区闰年和夏令时,您可能会遇到使用int技术的问题,因为您必须手动考虑这些更改。也许这对你来说不是问题。

答案 4 :(得分:0)

我说你有两种合适的格式:

  • “start time - duration”(datetime,int)或(timestamp,int)
  • “开始时间 - 结束时间”(日期时间,日期时间)或(时间戳,时间戳)

日期时间的一个大问题是DST每年跳两次,将计算量减少一个小时。在时区之间旅行同样令人困惑。如果您使用时间/时间表示法,您的持续时间可能会有所不同。如果您使用时间/持续时间表示法,您的结束时间可能会有所不同。因此,最适合这两种表示中的哪一种取决于您的使用(您可能需要使用混合方法)。

对于电影放映时间,我会说以几分钟为单位存储开始时间和持续时间是更合适的格式。电影的运行时间是给定的,结束时间是在事实之后。