今天搭建一个SpringBoot 环境出现 "The server time zone value ‘�й���ʱ��’ "错误
首先,先把大家的问题解决了,将JDBC连接的URL修改为如下:
jdbc:mysql://127.0.0.1:3306/DBName?serverTimezone=GMT%2b8
如果你不想到此止步,那就往下看吧!
世界各地的时间并不是一致的,这是因为地球每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时区改为东6区,查看当前时间,猜想会有什么效果?
select now(); -- 查询当前时间 2020-01-07 11:02:46
SET time_zone = '+6:00'; -- 修改时区为东六区
select now(): -- 2020-01-07 09:02:46
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小时
文章浏览阅读1.1w次,点赞7次,收藏34次。vue-grid-layout的使用、实例、遇到的问题和解决方案_vue-grid-layout
文章浏览阅读218次。然后连接一个数据源,就会在下面自动产生一个添加附件的组件。把这个控件复制粘贴到页面里,就可以单独使用来上传了。插入一个“编辑”窗体。_powerapps点击按钮上传附件
文章浏览阅读264次。(1) Abstraction (抽象)(2) Polymorphism (多态)(3) Inheritance (继承)(4) Encapsulation (封装)_"object(cnofd[\"ofdrender\"])十条"
文章浏览阅读133次。删除node_modules,重新npm install看是否成功。在 package.json 文件中的 scripts 中加入。修改你的第三方库的bug等。然后目录会多出一个目录文件。_修改 node_modules
文章浏览阅读883次。【代码】【】kali--password:su的 Authentication failure问题,&sudo passwd root输入密码时Sorry, try again._password: su: authentication failure
文章浏览阅读1w次,点赞13次,收藏97次。整理5个优秀的微信小程序开源项目。收集了微信小程序开发过程中会使用到的资料、问题以及第三方组件库。_微信小程序开源模板
文章浏览阅读128次。Centos7最简搭建NFS服务器_centos7 搭建nfs server
文章浏览阅读1.2k次,点赞2次,收藏3次。前言mybatis在持久层框架中还是比较火的,一般项目都是基于ssm。虽然mybatis可以直接在xml中通过SQL语句操作数据库,很是灵活。但正其操作都要通过SQL语句进行,就必须写大量的xml文件,很是麻烦。mybatis-plus就很好的解决了这个问题。..._mybaitis-plus ruledataobjectattributemapper' and 'com.picc.rule.management.d
文章浏览阅读325次。EECE 1080C / Programming for ECESummer 2022Laboratory 4: Global Functions PracticePlagiarism will not be tolerated:Topics covered:function creation and call statements (emphasis on global functions)Objective:To practice program development b_eece1080c
文章浏览阅读53次。被同机房早就1年前就学过的东西我现在才学,wtcl。设要求的数为\(x\)。设当前处理到第\(k\)个同余式,设\(M = LCM ^ {k - 1} _ {i - 1}\) ,前\(k - 1\)个的通解就是\(x + i * M\)。那么其实第\(k\)个来说,其实就是求一个\(y\)使得\(x + y * M ≡ a_k(mod b_k)\)转化一下就是\(y * M ...
文章浏览阅读1.3k次。首先,问题是如何出现的?晚上复查代码,发现一个activity没有调用自己的ondestroy方法我表示非常的费解,于是我检查了下代码。发现再finish代码之后接了如下代码finish();System.exit(0);//这就是罪魁祸首为什么这样写会出现问题System.exit(0);////看一下函数的原型public static void exit (int code)//Added ..._android 手动杀死app,activity不执行ondestroy
文章浏览阅读894次。Q: SylixOS 版权是什么形式, 是否分为<开发版税>和<运行时版税>.A: SylixOS 是开源并免费的操作系统, 支持 BSD/GPL 协议(GPL 版本暂未确定). 没有任何的运行时版税. 您可以用她来做任何 您喜欢做的项目. 也可以修改 SylixOS 的源代码, 不需要支付任何费用. 当然笔者希望您可以将使用 SylixOS 开发的项目 (不需要开源)或对 SylixOS 源码的修改及时告知笔者.需要指出: SylixOS 本身仅是笔者用来提升自己水平而开发的_select函数 导致堆栈溢出 sylixos