分钟,秒,毫秒的varchar或十进制数据类型

时间:2010-11-04 00:17:59

标签: sql mysql time types

我有一个MySQL数据库表,其中包含越野运行时间。我在路上岔路口,质疑我是否应该将运行时间(varchar)的当前数据类型转换为小数。

吸引我使用varchar数据类型的一个方面是我不必将传入的运行结果(通过php脚本解析)转换为秒,然后在动态检索时再返回。我的处理脚本确保每次长度为8个字符,除非运动员DNF(未完成),这也是我想要存储的信息。 DNF在结果中显示为“DNF”。

那么运行时间应该存储为17:40.57还是1060.57?各有哪些优缺点?是否有比我假设的正确类型更好的数据类型?

另外,如果您选择1060.57作为答案,那么我将如何逻辑存储DNF或DNS?

2 个答案:

答案 0 :(得分:4)

我最初建议使用TIME和DATETIME数据类型,但却不知道MySQL does not store microseconds in a column of any temporal data type (IE: TIME, DATETIME, etc)

FLOAT显然很差 - 甚至MySQL声明它只应在不考虑精度的情况下使用。

VARCHAR / CHAR不是一个好主意,因为没有办法强制执行格式的一致性。你可以混合使用mm:ss:ff和十进制格式 - 两者都可以接受,但显然会显得很奇怪。

出于数据一致性的考虑,DECIMAL将是最佳选择。鉴于MySQL的局限性验证。但是,如果你想要不同的格式化,这意味着可以获得信息的自定义功能,如果MySQL的时间函数支持足够的精度,这将是可用的。

其他免费数据库,如PostgreSQL,SQL Server Express或Oracle Express,可能值得考虑作为替代方案以获得更好的数据类型支持。

答案 1 :(得分:0)

我将其存储为DECIMAL秒,并附加用于存储DNF或DNS的列。如果需要,可以使用单个枚举用于DNF和DNS,因为它们是互斥的(假设DNS未启动)。这允许SUM,算术等。存储为VARCHAR不允许任何有趣的处理或过滤。

编辑:更改为DECIMAL,以确保精确度。