本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续!
- 🚀 魔都架构师 | 全网30W技术追随者
- 🔧 大厂分布式系统/数据中台实战专家
- 🏆 主导交易系统百万级流量调优 & 车联网平台架构
- 🧠 AIGC应用开发先行者 | 区块链落地实践者
- 🌍 以技术驱动创新,我们的征途是改变世界!
- 👉 实战干货:编程严选网
1 显示
TIMESTAMP列显示格式与DATETIME列相同。显示宽度都固定在19字符,格式:
YYYY-MM-DD HH:MM:SS2 范围
- datetime 以
YYYY-MM-DD HH:MM:SS格式检索和显示DATETIME值。支持的范围为1000-01-01 00:00:00到9999-12-31 23:59:59 - TIMESTAMP值不能早于1970或晚于2037
3 储存
TIMESTAMP
- 4字节储存
- 值以UTC格式保存
- 时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区
datetime
- 8字节储存
- 实际格式储存
- 与时区无关
4 时区影响
- 先插入一个数据insert into
t8values(now(), now()); - 改变客户端时区(东9区,日本时区)
- 再次显示插入的数据,变化了,timestamp类型的数据增加了 1个小时
timestamp
timestamp默认允许“非空”(not null by default), 如在定义“ts TIMESTAMP DEFAULT NULL” 是非法的。可指定为空 null ,“ts TIMESTAMP NULL" ,这时可以在添加语句改变默认值。
ts2 TIMESTAMP NULL DEFAULT 0,
ts3 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMPdefault,一个表中只能有一个列选择下面的其中一种:
# 语义:当插入(INSERT)一条新记录时,如该字段未被显式赋值,DB会自动将当前时间戳作为该字段默认值
# 用途:常用于记录数据的创建时间,create_time:只在插入时自动设置,之后更新记录时它不会改变
default CURRENT_TIMESTAMP
# 语义:当这条记录被更新(UPDATE)时(无论你更新的啥字段),DB会自动将该字段值更新为当前时间戳
# 用途:常用于记录数据的最后修改时间,如 update_time 字段
ON UPDATE CURRENT_TIMESTAMP
ON UPDATE 见上2
# 最强大、最常用组合
# 语义:1.当插入(INSERT)新记录时,该字段会自动设置为当前的创建时间
# 2.当更新(UPDATE)这条记录时,该字段会自动更新为当前的修改时间
# 该字段完美实现“创建时自动记录创建时间,更新时自动变为修改时间”,而无需应用层代码干预
default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
















