我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql now()函数调用系统时间不对的解决方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql now()函数调用系统时间不对的解决方法

今天在MySQL的Now函数上踩了两个坑,花了不少时间。

向数据库写记录最好用不用客户端时间

第一个坑是客户端、服务器的系统时间不一致。

在执行依赖时间的SQL查询的时候,使用了客户端本地的时间格式,客户端程序返回当前时间是:‘7/18/2022 10:02:43’,然而MYSQL就不能正确识别了,也没有报错,导致这个这个错误隐藏了很久才被发现。

实际上,如果给出的时间格式是这样:‘2022/7/18 10:02:43’,就会返回预期的结果。猜想这次运行客户端程序的服务器虽然也是中文版,但是内核应该是英文版的,因此系统默认的时间格式和我们常见的不同,于是MySQL把它认作是。。。(一个古怪的时间去了)

解决办法

尽可能不使用客户端的时间,不准确还有时区问题,用MySQL服务器端时间Now()来进行查询和保存记录。

MySQL服务器时区不等于东八区的问题

这次遇到的MySQL的版本默认的时区是UTC,也就是标准时间。如果数据记录的时间是北京时间,也就是东八区的时间,那么MySQL的Now函数返回的时间和数据记录的时间相差了八个小时。

查询MySQL时区:

mysql> show variables like "%time_zone%";
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | SYSTEM |
+------------------+--------+

设置MySQL时间为北京时间

mysql> set global time_zone = '+8:00';
Query OK, 0 rows affected
mysql> set time_zone = '+8:00';
Query OK, 0 rows affected
mysql> flush privileges;
Query OK, 0 rows affected

再查询下MySQL时区,验证下Now返回了北京时间

mysql> show variables like "%time_zone%";
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | +08:00 |
+------------------+--------+
mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2022-07-19 18:57:35 |
+---------------------+
1 row in set

MySQL时区的设置和Docker有关

这里说下花了我大量时间的坑,也就是这个服务器的MySQL是通过Docker安装的,我就懒得去修改MySQL的配置文件了,而配置文件里没有配置默认时区。

理论上,MySQL就会应用本地服务器的时区,而本地服务器的时区已经设置成东八区了,在系统控制台我能看到返回的当前时间是北京时间了。

问题就在于上面这个“理论”不靠谱,不是的,MySQL依然是返回UTC时间。

我记忆的这个“理论”应该是有问题的,但没有搞清楚具体问题是什么,怀疑是和Dockers有关,如果是直接安装的MySQL在不配置默认时区时似乎没有遇到这个问题。

解决办法:

结论是不管如何,还是手动在设置下系统的时区吧!或者在写MySQL的配置文件时,增加如下一个配置,然后才能使用Now()函数。

修改my.cnf文件,加入如下1行:

default-time-zone='+08:00' # 数据表默认时区

如果是中途 修改,需要重启Docker,不能偷懒。

到此这篇关于MySQL now函数使用的坑的文章就介绍到这了,更多相关MySQL now内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql now()函数调用系统时间不对的解决方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql now()函数调用系统时间不对的解决方法

目录向数据库写记录最好用不用客户端时间mysql服务器时区不等于东八区的问题MySQL时区的设置和docker有关今天在MySQL的Now函数上踩了两个坑,花了不少时间。向数据库写记录最好用不用客户端时间第一js个坑是客户端、服务器的系
2023-05-25

WinXP系统时间无法同步网络时间连时区也不显示的解决方法

WinXP系统时间总是与网络上的北京时间自动同步的,如果某一天你突然发现系统时间不准了,甚至连时区也不显示,就说明电脑或者系统出现了问题。通常有几下几种情况:1、CMOS电池没电了。2、在获取最近一次同步状态时出错,Rpc服务器不可用。3、
2023-06-11

Win8系统下使用LOL盒子时打不开无法使用的解决方法

随着WphpindowsXP系统的退市,作为新系统的Win8python越来越受到关注,使用win8系统的用户也是越来越多python,所以关于win8系统操作上的小问题也随之增多,有用户就在win8系统下使用LOL盒子的时候发现打不开、无
2023-06-05

在使用Win7时提示系统找不到指定路径的有效解决方法

在使用Win7系统时遇到提示错误“错误3:系统找不到指定路径”该怎么办呢?下面小编就为大家介绍一下具体解决办法!1.首先,请按“Win+R”键输入“Services.msc&rdq
2023-06-05

编程热搜

目录