MySQL timestamp 到2038如何解决
目前MySQL版本8.0.29,尝试了改sql_mode但是没有效果,只能把字段改为datetime吗
MySQL升级到了8.0.36,设置了sql_mode,新建了一张表设置日期超过2038还是不行
MySQL timestamp 到2038如何解决
目前MySQL版本8.0.29,尝试了改sql_mode但是没有效果,只能把字段改为datetime吗
MySQL升级到了8.0.36,设置了sql_mode,新建了一张表设置日期超过2038还是不行
MySQL 的 TIMESTAMP 数据类型在存储时间戳时有一个已知的限制,这是由于其底层表示是基于 Unix 时间戳的 32 位整数。Unix 时间戳从 1970 年 1 月 1 日开始计算,以秒为单位,由于它是 32 位的,因此它只能表示到 2038 年 1 月 19 日 03:14:07 UTC 的时间范围。一旦超过这个时间点,TIMESTAMP 数据类型可能会遇到溢出问题。
对于 MySQL 8.0.29 版本,解决这个限制的方法有几种:
使用 DATETIME 数据类型:
如果你不需要考虑时区变化,或者你的应用程序可以处理时区转换,那么将字段类型从 TIMESTAMP 改为 DATETIME 是一个简单直接的解决方案。DATETIME 类型可以表示从 1000-01-01 00:00:00 到 9999-12-31 23:59:59 的日期和时间范围。
示例:
ALTER TABLE your_table_name MODIFY your_timestamp_column_name DATETIME;
使用 BIGINT 和 UNIX 时间戳:
如果你需要更高的时间精度或超过 DATETIME 范围的时间戳,你可以使用 BIGINT 数据类型来存储 Unix 时间戳(以毫秒或微秒为单位)。这样,你可以存储从 1970 年 1 月 1 日至今的任意时间,并且能够扩展到未来很长的时间。
示例:
ALTER TABLE your_table_name MODIFY your_timestamp_column_name BIGINT UNSIGNED;
在应用程序中,你可以使用相应的函数来将 BIGINT 类型的 Unix 时间戳转换为人类可读的日期和时间格式。
请注意,更改列的数据类型可能会影响现有的应用程序代码和查询,因此在进行更改之前,请确保你了解这些更改的影响,并在生产环境中进行充分的测试。
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
3 回答1.2k 阅读✓ 已解决
2 回答2k 阅读
3 回答2k 阅读
升级后配置也不行,最后还是改表了,这里补充一个批量改表方式,执行下面查询sql,得到的sql语句复制出来然后执行就行了。
改表需谨慎,请在测试数据库测试没问题再操作!改表需谨慎,请在测试数据库测试没问题再操作!改表需谨慎,请在测试数据库测试没问题再操作!