zen*_*zen 4 mysql sql time types
我有一个 MySQL 数据库表,其中包含跨国跑步时间。我正处于岔路口,询问是否应该将运行时间的当前数据类型(varchar)转换为十进制。
varchar 数据类型吸引我的一个方面是,我不必将传入的运行结果(通过 php 脚本解析)转换为秒,然后在动态检索时再转换回来。我的处理脚本确保每次都是 8 个字符长,除非运动员 DNF(未完成),这也是我想要存储的信息。DNF 在结果中显示为“DNF”。
那么运行时间应该存储为17:40.57还是1060.57呢?各自的优点和缺点是什么?是否有比我已经假定的正确类型更好的数据类型?
另外,如果您选择 1060.57 作为答案,那么我将如何逻辑存储 DNF 或 DNS?
我最初建议使用 TIME 和 DATETIME 数据类型,但不知道MySQL 不会在任何时间数据类型(即:TIME、DATETIME 等)的列中存储微秒。
FLOAT 显然很差——甚至 MySQL 也声明只有在不关心精度时才应该使用它。
VARCHAR/CHAR 不是一个好主意,因为没有办法强制格式的一致性。您可以混合 mm:ss:ff 和十进制格式 - 两者都会被接受,但在显示时显然看起来很奇怪。
考虑到 MySQL 的限制,出于数据一致性和验证的考虑,DECIMAL 将是最佳选择。但这意味着如果您想要不同的格式,可以使用自定义功能来获取信息,如果 MySQL 的时间函数支持足够的精度,则可以使用该功能。
为了获得更好的数据类型支持,其他免费数据库(例如 PostgreSQL、SQL Server Express 或 Oracle Express)可能值得考虑作为替代数据库。