sql - 分、秒、毫秒的 varchar 或 decimal 数据类型

标签 sql mysql time types

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

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

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

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

最佳答案

我最初建议使用 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 和十进制格式 - 两者都可以接受,但在显示时显然看起来很奇怪。

考虑到 MySQL 的局限性,DECIMAL 将是最佳选择,以确保数据一致性和验证。但这意味着如果您想要不同的格式,可以使用自定义功能来获取信息,如果 MySQL 的时态函数支持足够的精度,这将是可用的。

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

关于sql - 分、秒、毫秒的 varchar 或 decimal 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4092853/

相关文章:

sql - 比较 SQL 查询结果

javascript - 如何在存储过程中使用表值作为参数?

mysql - kubernetes 中的 HAProxy 连接 galera 集群

linux - 如何递归查找并列出具有子目录和时间的目录中的最新修改文件

python - Tkinter — 随时间执行函数

sql - Laravel 5 - Eloquent 查询 - 这可能吗?

mysql - 计算标题的第一个字母并打印 A 到 Z

mysql - 如何添加两个 SUM

php - TinyMCE UTF-8 保存到 MySQL 数据库

javascript - 自页面加载后的 JQuery Clock/Timer(即使用户更改其计算机上的时间)