本文默认mysql版本大于5.7,之前版本对datetime不支持毫秒,同一个表里不允许有多个自动更新的时间字段
- 建表语句如下,创建时间和更新时间由数据库自动维护、精确到毫秒。字符集utf8mb4、区分大小写
CREATE TABLE IF NOT EXISTS `test`
(
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT ='测试表';
- 现在都2021年了,时间字段就不要再用timestamp字段了
- datetime类型没有和时区没关系,比如在东八区写入了
2021-07-31 14:45:39.202
,在东九区读出来依然是2021-07-31 14:45:39.202
- CURRENT_TIMESTAMP函数根据mysql服务设置的时区,获得对应时区的当前时间
- datetime在mysql存储的时候实际存储的就是20210731144539202这个数字,所以和时区无关
- 所以对跨境业务,在不同国家的数据库最好约定好一个统一的时区,建议都用utf+0,这样不同国家的服务从数据库中读出来在根据时区自己转换就好
出于合规要求,数据是不允许跨境流动的,所以不同国家的服务都应该有一个独立的数据库,而不是所有国家的服务公用一个数据库。但是一些小公司做跨境电商类的可能不会这么规范,真的就是共用一个数据库了