MySQL TIME与DECIMAL

时间:2019-02-13 14:02:17

标签: mysql

我想存储在数据库START timeEND time中。重要的只有hoursminutes,因此在表单用户中有4个下拉列表(start_time_hours,start_time_minutes,end_time_hours,end_time_minutes)。 小时值-[00-23],分钟值-[00、15、30、45]。最后,我想将两者都减去十进制。

我想知道存储2个TIME字段(用于开始和结束时间)或2个DECIMAL字段更好吗?

在这种情况下,分钟可以平滑地转换为十进制: [00 => 00,15 => 0.25,30 => 0.5,45 => 0.75],因此时间19:15将变为19.25。 我猜数据库的存储方式是一样的-如果我没记错的话,TIME和DECIMAL(4,2)都占用3个字节:)

例如,在将数据保存到DB之后,我返回编辑表单,并期望保存的值在这4个下拉列表中。如果数据库数据是TIME类型,那么我应该使用

  

$hours = date('G', strtotime($start_time)) && $minutes = date('i', strtotime($start_time))

对于START时间下拉列表,但如果数据为DECIMAL,则

  

$hours = floor($start_time); && $minutes = $start_time - $hours;

这两种方式中哪一种会更快?

在这两次之间可能是其他类型的计算,所以我猜对于TIME类型数据的所有计算都将涉及date()或(和)strtotime()函数,但对于DECIMAL类型只有数学函数? 那么,哪种解决方案最适合速度和DB?也许对于这种情况有更好的解决方案?

我认为DECIMAL的一个缺点是将来的可扩展性,例如,如果我们决定让用户从1至60中选择分钟,那么-我们将无法获得18:10的精确DECIMAL,因为它将是18.16666。 ..

1 个答案:

答案 0 :(得分:0)

我建议使用TIME类型。时间类型更有意义。也许十进制类型有时比TIME类型快一点。 但是,当使用十进制时,应确保每个人都可以在任何地方正确地计算,而不仅仅是在代码上。我认为这比大小和速度更重要。