springboot2.0和mysql8的时间问题

java 同时被 3 个专栏收录
5 篇文章 0 订阅
8 篇文章 0 订阅
5 篇文章 0 订阅

第一

首先提到sb2.0会在返回时间的时候对时间做json格式化然后再返回:

spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: Asia/Shanghai

这里的time-zone也可以用GMT+8

第二

然后说说mysql8的时区问题
这是mysql.cnf

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
default_authentication_plugin = mysql_native_password

然后我在docker里跑mysql8
这是docker-compose.yml

version: '3'
services:
  mysql8:
    image: mysql:8
    restart: always
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf:/etc/mysql/conf.d
      - ./localtime:/etc/localtime
      # - ./timezone:/etc/timezone
    environment:
      - MYSQL_ROOT_PASSWORD=root
    ports:
      - "3306:3306"
    container_name: mysql8
  adminer:
    image: adminer
    restart: always
    ports:
      - "8000:8080"
    container_name: adminer

我挂载了一个localtime,调整容器内的时区(timezone这个文件感觉没啥用,加不加都没影响)
这样的数据库本身存储时间是没问题的(插入时间正确)

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2019-01-17 08:03:00 |
+---------------------+
1 row in set (0.00 sec)
 
mysql> select current_timestamp;
+---------------------+
| current_timestamp   |
+---------------------+
| 2019-01-17 08:03:10 |
+---------------------+
1 row in set (0.00 sec)
 
mysql> 

但是这里用mysql8的驱动连接就会出现问题(据说6以后的驱动才会出现,没验证,也就是mysql8的版本)

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>8.0.13</version>
</dependency>

时间相差14个小时(我遇到的是这个问题加上一个问题的究极版,然后相差的时间在调试的时候出现过8、14、16各种各样,崩溃。。。)

解决方案之一

spring:
  datasource:
    # MySQL
    username: root
    password: root
#    url: jdbc:mysql://mysql_net:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false
    url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver

也就是加上serverTimezone=Asia/Shanghai
也可以是serverTimezone=GMT%2B8%2B表示+

解决方案之二

mysql.cnf

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
default_authentication_plugin = mysql_native_password
default-time-zone = '+8:00'

加上default-time-zone = '+8:00'
不是很理解
这样就解决了

感兴趣的小伙伴可以看我的项目:
https://github.com/hsowan/SpringBoot-demo

  • 0
    点赞
  • 5
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值