The server time zone value '�й���׼ʱ��' is unrecognized 错误详解-程序员宅基地

技术标签: 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

智能推荐

class和struct的区别-程序员宅基地

文章浏览阅读101次。4.class可以有⽆参的构造函数,struct不可以,必须是有参的构造函数,⽽且在有参的构造函数必须初始。2.Struct适⽤于作为经常使⽤的⼀些数据组合成的新类型,表示诸如点、矩形等主要⽤来存储数据的轻量。1.Class⽐较适合⼤的和复杂的数据,表现抽象和多级别的对象层次时。2.class允许继承、被继承,struct不允许,只能继承接⼝。3.Struct有性能优势,Class有⾯向对象的扩展优势。3.class可以初始化变量,struct不可以。1.class是引⽤类型,struct是值类型。

android使用json后闪退,应用闪退问题:从json信息的解析开始就会闪退-程序员宅基地

文章浏览阅读586次。想实现的功能是点击顶部按钮之后按关键字进行搜索,已经可以从服务器收到反馈的json信息,但从json信息的解析开始就会闪退,加载listview也不知道行不行public abstract class loadlistview{public ListView plv;public String js;public int listlength;public int listvisit;public..._rton转json为什么会闪退

如何使用wordnet词典,得到英文句子的同义句_get_synonyms wordnet-程序员宅基地

文章浏览阅读219次。如何使用wordnet词典,得到英文句子的同义句_get_synonyms wordnet

系统项目报表导出功能开发_积木报表 多线程-程序员宅基地

文章浏览阅读521次。系统项目报表导出 导出任务队列表 + 定时扫描 + 多线程_积木报表 多线程

ajax 如何从服务器上获取数据?_ajax 获取http数据-程序员宅基地

文章浏览阅读1.1k次,点赞9次,收藏9次。使用AJAX技术的好处之一是它能够提供更好的用户体验,因为它允许在不重新加载整个页面的情况下更新网页的某一部分。另外,AJAX还使得开发人员能够创建更复杂、更动态的Web应用程序,因为它们可以在后台与服务器进行通信,而不需要打断用户的浏览体验。在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种常用的技术,用于在不重新加载整个页面的情况下,从服务器获取数据并更新网页的某一部分。使用AJAX,你可以创建异步请求,从而提供更快的响应和更好的用户体验。_ajax 获取http数据

Linux图形终端与字符终端-程序员宅基地

文章浏览阅读2.8k次。登录退出、修改密码、关机重启_字符终端

随便推点

Python与Arduino绘制超声波雷达扫描_超声波扫描建模 python库-程序员宅基地

文章浏览阅读3.8k次,点赞3次,收藏51次。前段时间看到一位发烧友制作的超声波雷达扫描神器,用到了Arduino和Processing,可惜啊,我不会Processing更看不懂人家的程序,咋办呢?嘿嘿,所以我就换了个思路解决,因为我会一点Python啊,那就动手吧!在做这个案例之前先要搞明白一个问题:怎么将Arduino通过超声波检测到的距离反馈到Python端?这个嘛,我首先想到了串行通信接口。没错!就是串口。只要Arduino将数据发送给COM口,然后Python能从COM口读取到这个数据就可以啦!我先写了一个测试程序试了一下,OK!搞定_超声波扫描建模 python库

凯撒加密方法介绍及实例说明-程序员宅基地

文章浏览阅读4.2k次。端—端加密指信息由发送端自动加密,并且由TCP/IP进行数据包封装,然后作为不可阅读和不可识别的数据穿过互联网,当这些信息到达目的地,将被自动重组、解密,而成为可读的数据。不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。2.使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。_凯撒加密

工控协议--cip--协议解析基本记录_cip协议embedded_service_error-程序员宅基地

文章浏览阅读5.7k次。CIP报文解析常用到的几个字段:普通类型服务类型:[0x00], CIP对象:[0x02 Message Router], ioi segments:[XX]PCCC(带cmd和func)服务类型:[0x00], CIP对象:[0x02 Message Router], cmd:[0x101], fnc:[0x101]..._cip协议embedded_service_error

如何在vs2019及以后版本(如vs2022)上添加 添加ActiveX控件中的MFC类_vs添加mfc库-程序员宅基地

文章浏览阅读2.4k次,点赞9次,收藏13次。有时候我们在MFC项目开发过程中,需要用到一些微软已经提供的功能,如VC++使用EXCEL功能,这时候我们就能直接通过VS2019到如EXCEL.EXE方式,生成对应的OLE头文件,然后直接使用功能,那么,我们上篇文章中介绍了vs2017及以前的版本如何来添加。但由于微软某些方面考虑,这种方式已被放弃。从上图中可以看出,这一功能,在从vs2017版本15.9开始,后续版本已经删除了此功能。那么我们如果仍需要此功能,我们如何在新版本中添加呢。_vs添加mfc库

frame_size (1536) was not respected for a non-last frame_frame_size (1024) was not respected for a non-last-程序员宅基地

文章浏览阅读785次。用ac3编码,执行编码函数时报错入如下:[ac3 @ 0x7fed7800f200] frame_size (1536) was not respected for anon-last frame (avcodec_encode_audio2)用ac3编码时每次送入编码器的音频采样数应该是1536个采样,不然就会报上述错误。这个数字并非刻意固定,而是跟ac3内部的编码算法原理相关。全网找不到,国内音视频之路还有很长的路,音视频人一起加油吧~......_frame_size (1024) was not respected for a non-last frame

Android移动应用开发入门_在安卓移动应用开发中要在活动类文件中声迷你一个复选框变量-程序员宅基地

文章浏览阅读230次,点赞2次,收藏2次。创建Android应用程序一个项目里面可以有很多模块,而每一个模块就对应了一个应用程序。项目结构介绍_在安卓移动应用开发中要在活动类文件中声迷你一个复选框变量

推荐文章

热门文章

相关标签