undefined

一、MySQL的 timestamp 类型

TIMESTAMP 列的格式为 YYYY-MM-DD HH:MM:SS,固定为 19 个字符。TIMESTAMP 值的范围从 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC。

占用空间 4 个字节。但是只使用到 pow(2,31) - 1 这么大

当将 TIMESTAPM 值插入到表中,MySQL 会将其从连接的时区转换为 UTC 后进行存储。当查询 TIMESTAMP 值时,MySQL 会将 UTC 值转换回连接的时区。

1
2
3
4
# 设置时区
set time_zone = '+00:00'
# 查看时区
show variables like '%time_zone%';

设置 TIMESTAMP 列的自动初始化和自动更新

1
2
3
4
5
6
# created_time 字段会被自动初始化为当前时间
# updated_time 字段会自动更新为当前时间,当行中任何其他列中的值更改时
create table categories (
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

如果存储小数秒,需要额外增加 3 个字节。如果存入的是 NULL,会自动存储当前时间

二、MySQL的 datatime 类型

DATATIME 列的格式为 YYYY-MM-DD HH:MM:SS,范围 1000-01-01 00:00:009999-12-31 23:59:59

在 MySQL 5.6.4 之前,DATATIME 值需要 8 个字节存储。后面的版本使用 5 个字节存储,随着精度不同占用空间不同。

DATETIME值可以包括具有YYYY-MM-DD HH:MM:SS[.fraction]例如的格式的尾随小数秒到微秒 2015-12-20 10:01:00.999999。精度 1-2 占用 1 个字节,精度 3-4 占用 2 个字节,精度 5-6 占有 3 个字节。

例如:2015-12-20 10:01:00.999999 需要8个字节,5个字节用于2015-12-20 10:01:00 ,3个字节用于.9999992015-12-20 10:01:00.9 只需要6个字节,1个字节用于小数秒精度。

DATATIME 值存储没有时区的概念。如果存入的是 NULL,不会自动存储当前时间,会直接存入 NULL 值。

三、时间函数

now() 获取当前日期+时间

current_timestam() 获取当前时间戳