簡體   English   中英

分鍾,秒,毫秒的varchar或十進制數據類型

[英]varchar or decimal data type for minutes, seconds, milliseconds

我有一個MySQL數據庫表,其中包含越野運行時間。 我在路上岔路口,質疑我是否應該將運行時間(varchar)的當前數據類型轉換為小數。

吸引我使用varchar數據類型的一個方面是我不必將傳入的運行結果(通過php腳本解析)轉換為秒,然后在動態檢索時再將其轉換回來。 我的處理腳本確保每次長度為8個字符,除非運動員DNF(未完成),這也是我想要存儲的信息。 DNF在結果中顯示為“DNF”。

那么運行時間應該存儲為17:40.57還是1060.57? 各有哪些優缺點? 是否有比我已經假設的正確類型更好的數據類型?

此外,如果您選擇1060.57作為答案,那么我將如何邏輯存儲DNF或DNS?

我最初建議使用TIME和DATETIME數據類型,但不知道MySQL不會在任何時態數據類型的列中存儲微秒(IE:TIME,DATETIME等)

FLOAT顯然很差 - 甚至MySQL聲明它只應在精度不是問題時使用。

VARCHAR / CHAR不是一個好主意,因為沒有辦法強制執行格式的一致性。 你可以混合mm:ss:ff和十進制格式 - 兩者都可以接受,但顯然看起來很奇怪。

鑒於MySQL的局限性,DECIMAL將是數據一致性和驗證的最佳選擇。 但是,如果你想要不同的格式,這意味着可以獲得信息的自定義功能,如果MySQL的時間函數支持足夠的精度,這將是可用的。

其他免費數據庫,如PostgreSQL,SQL Server Express或Oracle Express,可能值得考慮作為替代方案,以獲得更好的數據類型支持。

我將它存儲為DECIMAL秒數,其他列用於存儲DNF或DNS。 如果需要,可以使用單個枚舉用於DNF和DNS,因為它們是互斥的(假設DNS未啟動)。 這允許SUM ,算術等。存儲為VARCHAR不允許任何有趣的處理或過濾。

編輯:更改為DECIMAL ,以獲得精確度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM