数据库访问时区问题

Bryce · · 1346 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

今天是第二次跳进这个坑里面。

我要做的接口有一个需求,就是根据设定好的开始时间和结束时间过滤掉未开始和过期的内容。我用xorm作为ORM引擎进行数据库开发。直接一条解决了问题。当时还大概测了一下,没有任何问题。

Where("displayorder<>0 AND effectivetime< ? AND expirationtime> ?", time.Now(), time.Now())

今天iOS开发要调用我的接口开发,因为我写的测试数据不完整,他叫测试配了几条测试数据。测试妹子很专业的,加了一条过期的,一条要显示的,一条未开始的,然后我这三条一条都没展示。。。

问题报给我之后,很明显就知道问题出在哪里了。肯定是那个Where查询错了。xorm支持记录SQL语句日志,一开始开发我就配置上了。果断去看日志。把SQL复制到Navicat里面运行,发现没有任何问题。。。这就邪了。百思不得其解。我就开始瞎猜。是不是传入的time.Now()有问题。我就把日期格式化了一下,可以了。

const DATE_LAYOUT = "2006-01-02 15:04:05"
now := time.Now()
now_str := now.Format(DATE_LAYOUT)

这一次歪打正着让我觉得很不对劲(我的直觉还是很准确的!!!),然后就去请教了一下我万能的大哥,他说应该是UTC的问题。意思就是时区的问题,我才恍然大悟,之前我也踩过这个坑。在MySQL连接字符串里面加上时区信息就可以了。

parseTime=true&loc=Asia%2FChongqing

最后,我万能的大哥还告诉我,根本不需要传时间进去,直接使用MySQL的函数NOW()就可以了。嗯,大哥就是大哥。。。

Where("displayorder<>0 AND effectivetime< NOW() AND expirationtime> NOW()")

我团的Ruby团队据说是国内比较牛逼的Ruby团队了,因为主站一直用Ruby做开发的。我们Team只有5个人,选用了Golang作为主力开发语言,Golang又比较新,我们Team会不会成为国内比较牛逼的Golang团队呢?哈哈哈

原文链接:数据库访问时区问题,转载请注明来源!


有疑问加站长微信联系(非本文作者)

本文来自:Cyeam

感谢作者:Bryce

查看原文:数据库访问时区问题

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

1346 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传