MySQL数据库中的CURRENT_TIMESTAMP函数使用经验小结
一 背景
在数据插入时,将数据的插入时间以系统默认时间值的形式进行插入。例如:
CREATE TABLE example_table (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO example_table (name) VALUES ('测试用户');
在查阅相关资料时得知:
- CURRENT_TIMESTAMP返回当前日期和时间,其数据类型为DATETIME或TIMESTAMP。
- 对于TIMESTAMP类型,取值范围是从1970-01-01 00:00:01 UTC到2038-01-19 03:14:07 UTC。
- 对于DATETIME类型,默认情况下,取值范围是从1000-01-01 00:00:00到9999-12-31 23:59:59。
- 在MySQL 8.0及更高版本中,DATETIME和TIMESTAMP类型支持微秒精度,可以存储到小数点后6位。
因此,需要确认在时间超过2038-01-19 03:14:07 UTC时,建表、插入数据时数据库是否能够正常运行。
二 验证过程
2.1 关闭系统自动时间同步
sudo timedatectl set-ntp false
2.2 变更当前系统时间到2037年
sudo timedatectl set-time "2037-10-01 12:30:00"
当前系统时间更新为2037-10-01 12:30:00,执行建表、插入SQL。建表成功,插入也正常。
2.3 变更当前系统时间到2039年
sudo timedatectl set-time "2039-10-01 12:30:00"
执行建表语句,报错如下:
[HY000][3507] Failed to update tables dictionary object.
2.4 变更当前系统时间到2037年,建表后变更系统时间到2039年
sudo timedatectl set-time "2037-10-01 12:30:00"
执行建表语句,建表成功。变更当前系统时间到2039年:
sudo timedatectl set-time "2039-10-01 12:30:00"
插入成功,时间正确。
三 结论
1、如果在2038-01-19 03:14:07 UTC前,MySQL数据库建表以及通过使用CURRENT_TIMESTAMP进行时间插入时,均正常;
2、如果在2038-01-19 03:14:07 UTC后,MySQL数据库建表建表会出现报错。但建表在2038-01-19 03:14:07 UTC前,在该时间点后通过使用CURRENT_TIMESTAMP进行时间插入时,正常;CURRENT_TIMESTAMP 返回的类型通常为 DATETIME 或 TIMESTAMP,在进行日期和时间计算时,确保与其他日期和时间字段的数据类型一致,以避免类型转换错误;
3、CURRENT_TIMESTAMP 是获取当前日期和时间的基础函数,但在不同的数据库系统中,还有其他类似的函数,如 NOW()、SYSDATE() 等。
四 参考资料
1、DATE、DATETIME 和 TIMESTAMP 类型
2、Can not create database when set since year 2038
原文地址:https://blog.csdn.net/solaraceboy/article/details/143323802
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mrgr.cn/news/61014.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mrgr.cn/news/61014.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!