我在使用MySQL的TIMESTAMP格式和自定義UNSIGNED INT格式保存日期和時間值時遇到困難。這裏主要考慮的是檢索速度,PHP中適當的範圍計算以及偶爾格式化爲人類可讀的值。使用MySQL的TIMESTAMP與直接存儲時間戳
每種類型及其範圍所需的存儲空間:
DATETIME 8 bytes '1000-01-01 00:00:00' to '9999-12-31 23:59:59'
TIMESTAMP 4 bytes '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC
UNSIGNED INT 4 bytes (Maximum Value 4294967295)
我不需要DATETIME的範圍內的。我在TIMESTAMP和UNSIGNED INT之間被撕裂。
論點支持unsigned int型的:
-
4294967295轉換到Sun,2106年2月7日
- Unix時間戳6時28分15秒格林尼治標準時間比TIMESTAMP越來越配不上我
- 比較這些時間戳直接在PHP會更快,而不是通過轉換的strtotime的TIMESTAMP(),然後比較它們
唯一的好處時間戳會給我是當我在值從MySQL表手動閱讀和需要「看他們。
是否有任何令人信服的理由使用TIMESTAMP而不是UNSIGNED INT?
查看關聯:[日期時間vs時間戳?](http://stackoverflow.com/questions/409286/datetime-vs-timestamp) – JYelton
32位時間戳只會在2038年1月纔會出現,而且許多庫仍在使用32位time_t而不是64位,所以你可能會遇到可移植性問題。在內部,PHP將時間戳/日期時間存儲爲數字格式,並且只在檢索時轉換爲好的yyyy-mm-dd類型的字符串。 –