我想存储在数据库START time
和END time
中。重要的只有hours
和minutes
,因此在表单用户中有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。 ..
答案 0 :(得分:0)
我建议使用TIME类型。时间类型更有意义。也许十进制类型有时比TIME类型快一点。 但是,当使用十进制时,应确保每个人都可以在任何地方正确地计算,而不仅仅是在代码上。我认为这比大小和速度更重要。