0
点赞
收藏
分享

微信扫一扫

跨国业务的数据库时区方案

亿奇学 2021-09-28 阅读 64
码哥
  • 建表语句如下,创建时间和更新时间由数据库自动维护、精确到毫秒。字符集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,这样不同国家的服务从数据库中读出来在根据时区自己转换就好
举报

相关推荐

0 条评论