首页 新闻 搜索 专区 学院

mysql修改或者添加时间格式的字段,使用sql语句时间减少8小时

0
悬赏园豆:30 [已解决问题] 解决于 2019-08-29 10:06

翻阅无数博客——网上好多博客都是改系统或者数据库时区,经过修改如下图过程:第一张图截图没截好,是有个下划线的

觉得应该没问题了,但很遗憾,没有用,使用sql语句新增或修改数据时间字段依然会自动减少8小时整,但是使用Navicat Premium 12可视化工具直接修改时间就没问题。
但是现在要写进java程序,这个可视化肯定不行,还是要链接数据库写sql的,于是在网上找到好多连接数据库url后面拼接

  1. serverTimezone=GMT%2B8 —— 东八
  2. serverTimezone=Hongkong —— 香港
  3. serverTimezone=Asia/Shanghai —— 上海
    但是都无效,还是少8个小时,郁闷透顶,请问有没有大神赐教,感激不尽!!
    版本配置:mysql 8.0.15 , jdk12 , mybatis3.5 , springboot2.1.1
myzy的主页 myzy | 初学一级 | 园豆:123
提问于:2019-08-28 17:43
< >
分享
最佳答案
0

1.配置mybatis自定义类型转换器

2.mybatys配置文件

3.application.yml配置

4.mapper.xml文件

注意区分mapper.xml中时间字段指定的java类型而不是jdbc类型,这样先加8,反正到数据库会自动减8,
虽然总感觉这不是正解,但是也莫得其他办法了,因为网上其他办法都已经试过了,没有用!!!

myzy | 初学一级 |园豆:123 | 2019-08-29 10:00
其他回答(1)
0

不必郁闷,问题不一定出在服务端。

假设时间存储的是用timestamp表示,值为0,你想想 —— 你现在打印出来应该是什么时间值?

又假设,你现在在美国,打印出来应该怎么显示?

如果是多平台客户端,我很多时候是直接放弃DateTime类型的,直接存储long值,这样反而简化,时间显示的问题不必去折腾,免得android显示不一样,windows显示不一样。

这跟编码一样,服务器需要设置,实际上客户端仍然需要设置,否则两边没法对上号,出来的就是乱码。

收获园豆:30
花飘水流兮 | 园豆:12985 (专家六级) | 2019-08-28 23:52

但是那边要求根据时间区间查找对应时间段的信息,如果不用时间去存储这个功能怎么做呢,时间存储的话这八个小时影响挺大的,我总不能和他们说你们存储信息的时候多存八个小时吧😄,。现在问题是只有sql语句存在这样的问题,可视化操作是非常正常的,时区什么的我都有调整,没有用耶

支持(0) 反对(0) myzy | 园豆:123 (初学一级) | 2019-08-29 00:01

@myzy: 注意看内容,值也许根本就是对的,比如就是你要求的0时区的时间,但是显示是可以不同的。你分别用不同客户端显示是可能这种问题存在的。

你管他客户端什么时区,反正根据本地TimeZone转成一个统一的基准时间去判断就行了。

支持(0) 反对(0) 花飘水流兮 | 园豆:12985 (专家六级) | 2019-08-29 00:05

@花飘水流兮: 并不是客户端的原因,我在服务器登录MySQL直接SQL语句执行,数据库里的时间就已经少了8小时

支持(0) 反对(0) myzy | 园豆:123 (初学一级) | 2019-08-29 00:11

@花飘水流兮: 是在本地测试运行就已经是这样了,无论是我自己本地还是服务器,我都已经调整了时区,完全是对应上的

支持(0) 反对(0) myzy | 园豆:123 (初学一级) | 2019-08-29 00:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册