使用MySQL的时间戳与直接存储时间戳
2022-08-30 11:43:29
我陷入了两难境地,无法以MySQL的TIMESTAMP格式保存日期和时间值,而不是以自定义UNSIGN INT格式保存日期和时间值。这里的主要考虑因素是检索速度,PHP中适当的范围计算以及偶尔格式化为人类可读的值。
每种类型及其范围所需的存储空间:
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和UNSIGN INT之间徘徊。
支持无符号 INT 的论据:
- 4294967295的UNIX时间戳转换为星期日,07 Feb 2106 06:28:15 GMT,这比TIMESTAMP更多,对我来说足够好
- 直接在PHP中比较这些时间戳会更快,而不是通过strtotime()转换时间戳然后比较它们
TIMESTAMP给我的唯一优势是当我手动读取mysql表中的值并需要“查看”它们时。
是否有任何令人信服的理由使用时间戳而不是无符号的INT?