MySQL时区问题,使用了datetime作为下单时间

用户昵称不能为空 2017-04-23 10:24:50
主服务器上部署着多个针对不同时区国家的电商网站,而且这些网站存储下单时候的字段,MySQL基本上都是使用的 datetime 类型。从服务器N台,主要用于备用 和 Read。然后因为MySQL存储时间类型是没有时区,跟随服务器系统的时区,就导致了如果主从服务器时区不一样,那么同步过去的数据就会立即错误,风险极大。并且有的程序之中已经指定 东八区 或 西五区(纽约时间),然后又在程序中生成 datetime格式时间再插入数据库……

关于数据库的时区,其实是服务器上系统的时区,该如何设计才更合理科学?

方案一、所有服务器的系统全部使用UTC时区,mysql数据库表字段可以使用datetime来存储时间,应用程序如PHP JAVA在写入的生成时间的时区也都是UTC时区下生成的,等于全部统一。这样就必须保证所有服务器的时区都统一在UTC,查询显示给用户的时候全部转换成当地用户 localtime。但是存在一个问题,比如在其当地时间伦敦是 上午八点发帖,但是如果真的进行时间转换,到了在位于北京的用户看的其发布时间就是下午5点发布的。这样显示其实也不合理 ?

方案二、
服务器的时区任意设置,mysql中存放时间的字段全部使用int存时间戳。写入的时候全部写入unix时间戳。但很多已经成型的程序都并不是这样,如果这样全部修改一便,工程量巨大,并且旧数据需要转换。其次同样存在上面那个问题。

如何解决数据时区问题?
...全文
1694 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
quguoqinghn 2020-07-27
  • 打赏
  • 举报
回复
我觉得 时间戳和时区,要一块存储。展示的时候,通过时间戳和发帖人所在时区在恢复时间。
quguoqinghn 2020-07-27
  • 打赏
  • 举报
回复
引用 3 楼 solarsilvia 的回复:
在伦敦8点发的帖子为啥在北京看是17点发的?有截图吗?
因为存储的是时间戳,伦敦8点的时间戳,在北京时间就是17点。
solarsilvia 2020-01-02
  • 打赏
  • 举报
回复
在伦敦8点发的帖子为啥在北京看是17点发的?有截图吗?
ACMAIN_CHM 2017-04-24
  • 打赏
  • 举报
回复
在WEB程序中的MYSQL连接字符串加上timezone的设置。
  • 打赏
  • 举报
回复
引用 1 楼 ACMAIN_CHM 的回复:
在WEB程序中的MYSQL连接字符串加上timezone的设置。
如果是全新的程序,应该统一用UTC还是 当地时区比较好呢

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧