The server time zone value '�й���׼ʱ��' is unrecognized 错误详解_安装keetlethe server time zone value ' й ' is_緑水長流*z的博客-程序员秘密

技术标签: java  记录  MySQL  mysql  

今天搭建一个SpringBoot 环境出现 "The server time zone value ‘�й���׼ʱ��’ "错误

首先,先把大家的问题解决了,将JDBC连接的URL修改为如下:

jdbc:mysql://127.0.0.1:3306/DBName?serverTimezone=GMT%2b8

如果你不想到此止步,那就往下看吧!

时区简介

  • tips:如果大家已经了解时区概念,那么可以跳过本节

为什么会有时区?

世界各地的时间并不是一致的,这是因为地球每24个小时就会围绕地轴旋转一周。当地球的某个地点享受着阳光的沐浴时,遥远的另一侧则笼罩在黑暗中,处于夜晚。世界上共有24个时区,每两个相邻时区的时间相差1小时。美国和加拿大疆域辽阔,横跨6个时区。

时区

GMT(Greenwich Mean Time):格林尼治标准时,格林尼治标准时(GMT)是格林尼治天文台通过天文学观测将每日太阳穿过本初子午线的瞬间定为正午时刻,并以此来制定时间,所以格林尼治标准时是“天文学时间”,随着科技的进步,人们发现该时间不够精确,因为地球自转的速度是不均衡的,而且自转速度也会越来越慢,所以不再使用。

GMT 12:00 就是指的是英国伦敦郊区的皇家格林尼治天文台当地的中午12:00,而GMT+8 12:00,则是指的东八区的北京当地时间的12:00。

UTC(Universal Time Coordinated):协调世界时,是基于原子物理学的特性,将在海平面上实现的“原子时秒”定义为国际标准时的时间单位,而原子时秒是这样定义的:铯-133 原子基态的两个超精细能级间在零磁场下跃迁辐射9192631770周所持续的时间 。所以,协调世界时属于“原子物理时间”,它更加精确,基本不会产生误差。

如果还没看懂,那就这样理解:GMT==UTC
在这里插入图片描述
从上图可以看出,我们国家所处的大多地区城市都在东八区,包括北京、上海、广州、深圳、武汉、长沙、郑州、南昌、合肥、福州、杭州…

解决方法一

在JDBC驱动包6以上版本(包括6)加上了一些新特性,其导致结果在JDBC连接的URL上面必须加上serverTimezone参数,来设置时区
将jdbc连接的URL后面加上serverTimezone参数,如:

jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2b8

上面时区设置为GMT+8代表为东八时区,为什么上面写的是GMT%2b8呢?那是因为URL后面的+号需要编码处理。如果直接写成GMT+8,那么+号会被解码成一个空格,会出现如下错误:
No timezone mapping entry for 'GMT 8',说在找不到GMT 8的时区映射,啥意思?

原来所有可选择的时区在TimeZoneMapping.properties配置文件中全部有做映射处理,搭建可以在该文件中寻找对应的时区,当然也可以选择通用时区:GMT+8(记得加号要编码)。

按住Ctrl+Shift+N(当然,如果你用的开发工具是IDEA),搜索TimeZoneMapping.properties配置文件,如下:

在这里插入图片描述
左边的为Key,右边的为Value。大家可以选择几个时区试试
如:

jdbc:mysql://127.0.0.1:3306/test?serverTimezone=Asia/Shanghai  # 上海时区(也是东八区)
jdbc:mysql://127.0.0.1:3306/test?serverTimezone=Asia/Macau		# 澳门时区(也是东八区)
jdbc:mysql://127.0.0.1:3306/test?serverTimezone=Europe/Istanbul	# 伊斯坦布尔时区(属于东三区)

关于编码,大家可以来到这个网站编码:URL编码

解决方法二

如果不想在URL上设置时区也可以把mysql驱动包将为6以下版本(本人亲测可行)。
mysql-connector-java-5.1.47.jar(任意6以下的版本)

解决方法三

如果不想改JDBC的URL也不想改驱动,那么还有一种办法,那就是修改MySQL数据库的时区了
查看mysql时区:

show variables like '%time_zone%'		
  • system_time_zone:系统时区,服务器启动时,他将尝试自动确定主机的时区(其实是空的),该值为只读
  • time_zone:服务器当前时区。全局 time_zone系统变量指示服务器当前正在运行的时区。初始time_zone 值为SYSTEM,指示服务器时区与当前操作系统系统时区相同。

方案一:

修改配置文件:C:\ProgramData\MySQL\MySQL Server 5.7\my.ini,(记住不要去修改C:\Program Files\MySQL\MySQL Server 5.7\my-default.ini。没用的!)
在[mysqld]下面增加default-time-zone=+8:00(东八区),然后重启mysql服务
再次查看mysql时区:

show variables like '%time_zone%'	

发现time_zone变为了+8:00

方案二:

如果你不想修改配置文件也可以使用命令方式修改

SET GLOBAL time_zone = '+8:00';		-- 以后每次连接mysql都是东八区
SET time_zone = '+8:00';			-- 只有此次连接mysql是东八区,下次连接mysql又回到系统默认时区

然后必须关闭当前连接!重新连接后才可以查看到最新数据

show variables like '%time_zone%'	

测试MySQL时区

将时区mysql时区改为东6区,查看当前时间,猜想会有什么效果?

select now();					-- 查询当前时间  2020-01-07 11:02:46

SET time_zone = '+6:00';		-- 修改时区为东六区

select now():					-- 2020-01-07 09:02:46

测试URL设置的时区

jdbc:mysql://127.0.0.1:3306/test?serverTimezone=Europe/Istanbul	# 伊斯坦布尔时区(东三区)
@RestController
@RequestMapping("/user")
public class UserController {
    

    @Autowired
    private UserDao userDao;


    @PostMapping
    public Map save(@RequestBody User user) throws Exception {
    
        user.setBirthday(new Date());
        userDao.save(user);
        Map returnMap = new HashMap<>();
        returnMap.put("message", "添加成功");

        return returnMap;
    }
}

添加成功后发现,时间往前推进了5小时,东三区和东八区相差5小时

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Bb15070047748/article/details/103851200

智能推荐

Android APK加固原理_android app加固_葡萄使徒的博客-程序员秘密

Android作为开源框架,开放之余,所要面临的就是安全问题,世间之事,有正就有邪,有攻就有守,作为开发者虽然不需要进入专业安全领域,但还是需要掌握基本的安全常识和原理。

python学习之删除DataFrame某一行/列内容_dengfei4999的博客-程序员秘密

用法:DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False)参数说明:labels 就是要删除的行列的名字,用列表给定axis 默认为0,指删除行,因此删除columns时要指定axis=1;index 直接指定要删除的行columns 直接指定要删除的列inplace=False,默认该...

npm 镜像配置还原_npm还原_心歌技术的博客-程序员秘密

1、npm查看镜像配置地址npm get registry2、还原npm镜像配置npm config set registry https://registry.npmjs.org/3、查看npm镜像配置,我们会发现已经变了npm get registry

YOLOv5训练-wandb_yolov5 wandb_孤鹏独翔,鸿飞九霄的博客-程序员秘密

概述YOLOv5(v4.0 release开始)已经在本地集成了Weights &amp; Biases,也就是可视化的工具wandb,可方便的追踪模型训练的整个过程,包括模型的性能、超参数、GPU的使用情况、模型预测,还有数据集。软硬件环境OS:CentOS 7.7.1908 [[email protected] yolov5-docker-image]$ cat /etc/redhat-releaseCentOS Linux release 7.7.1908 (Core)[[email protected] y

【excel】用按钮跳转到表格的定义位置_excel跳转到引用位置_懒懒的狗头的博客-程序员秘密

2020-01-15【实现后的效果】首先,先展示效果,然后说明实现方案:在表格的其他任何位置点击如图所示的『121 电气零件』按钮,就会一下跳转到事先定义好的单元格,方便在数据众多的表格数据中进行定位。【实现方案】第一步,点击【插入】》【形状】,在表里随便拉个方框,输入按钮名称;第二步,点击【公式】》【名称管理器】,然后点击『新建』,按图所示设置公式名称和引用位置,点击『确定』;...

未来想向人工智能等方面发展,学编程的话是python还是java合适呢?_一抹斜阳尽余辉的博客-程序员秘密

看了你提的问题,就是想向人工智能领域发展,而不知道,编程语言是学Python好还,学Java好,我给你截一张的我博客的评论,如下这是一名java工程师的回答,我想这应该是很有说服务力的吧,如果在前3年,Matlab、Scala、R、Java和Python,还有的一争,但是现在,Python作为AI时代的头牌语言已经确定。时至今日,Python已经是数据分析和AI的第一语言,网络攻防的第...

随便推点

我,看房没戴头盔,损失二十万_程序员大咖的博客-程序员秘密

Python实战社群Java实战社群长按识别下方二维码,按需求添加扫码关注添加客服进Python社群▲扫码关注添加客服进Java社群▲金磊 鱼羊 发自 凹非寺 量子位 报道 | 公众号 ...

Vue中侦听器watch时,调用this时出现undefined问题_vue watch this报错_犹有傲霜枝的博客-程序员秘密

watch侦听器中,我们要将新的值赋给this.a出错watch: { value: (newV, oldV) =&amp;amp;amp;gt; { this.a = newV; }}这里报错undefined,这里错误的原因是不能写成箭头函数。写成箭头函数后,this会取上下文,而不是组件里面的this了,正确写法为:watch: { value: function(newV, oldV) { t...

Linux下应用程序开发:QT的内部进程通信_qt 与linux程序通信_fjiale的博客-程序员秘密

<br />Linux下应用程序开发:QT的内部进程通信<br />http://www.lupaworld.com/tutorial-view-aid-7177.html<br /> <br />Qt 作为一种跨平台的基于 C++ 的 GUI 系统,能够提供给用户构造图形用户界面的强大功能。自从 1996 年 Qt 被 Trolltech 公司发布以来,该系统成为世界上很多成功的图形用户应用所使用的主要系统。更为重要的是,Linux 操作系统的桌面环境系统 KDE 也是基于 Qt 构造的。目前,Qt 已经

lvs,haproxy,keepalived,heartbeat_weixin_34050389的博客-程序员秘密

lvs的是通过vrrp协议进行数据包转发的,提供的是4层的负载均衡。特点是效率高,只要你机器网卡抗的住就不是问题。 haproxy可以提供4层或7层的数据转发服务,能做到7层的好处是可以根据服务所处的状态等进行负载。 以上两者只是实现了负载均衡,但是他们本身是明显的单点故障,因此需要使用双机软件做热备,来保证高可用性。keepalived可以通过检测vrrp数据包来切换,...

git使用教程 + github国内镜像 + TortoiseGit配置及修复_git国内镜像_rainbow_lucky0106的博客-程序员秘密

https://github.com.cnpmjs.org/备用https://www.gitclone.com/gogs/https://gitclone.com/https://gitee.com/

go-zero 单体应用框架学习—2 中间件的添加和原理_gozero casbin_wanmei002的博客-程序员秘密

中间件的添加在 server.Server 结构体有个一方法 Use // Use adds the given middleware in the Server. func (e *Server) Use(middleware Middleware) { e.ngin.use(middleware) } type Middleware func(next http.HandlerFunc) http.HandlerFunc

推荐文章

热门文章

相关标签