草庐IT

mysql NOW() 返回错误值,而全局时区设置为 +00 :00

coder 2023-10-08 原文

两周以来我一直对时区问题感到困惑,在我的本地主机上一切正常,但在专用服务器上返回错误值。让我说说我到目前为止做了什么。

首先通过以下查询设置全局时区:(本地主机和服务器上的 super 权限)

 SET GLOBAL time_zone = '+00:00';

现在运行下面的查询来交叉检查所做的一切

SELECT NOW(),@@global.time_zone AS gtz,@@session.time_zone AS stz,
       TIMEDIFF(NOW(), CONVERT_TZ( NOW() , @@session.time_zone ,  '+00:00' ) )
       AS OFFSET;

但它在本地和专用服务器上显示不同的结果

本地主机(192.168.x.x)mysql版本:5.5.8

+---------------------+--------+--------+----------+
| NOW()               | gtz    | stz    | OFFSET   |
+---------------------+--------+--------+----------+
| 2012-07-02 07:06:55 | +00:00 | +00:00 | 00:00:00 |
+---------------------+--------+--------+----------+
1 row in set (0.00 sec)

专用服务器(182.168.x.x)mysql版本:5.1.53-log

+---------------------+--------+--------+----------+
| NOW()               | gtz    | stz    | OFFSET   |
+---------------------+--------+--------+----------+
| 2012-07-02 12:37:59 | +00:00 | +00:00 | 00:00:00 |
+---------------------+--------+--------+----------+

我的问题是

why NOW() gives wrong time ( above is IST ) whereas timezone is set to +00:00 ?

边注:

我运行下面的查询

SHOW VARIABLES LIKE '%time%zone%';

在本地主机上

+------------------+---------------------+
| Variable_name    | Value               |
+------------------+---------------------+
| system_time_zone | India Standard Time |
| time_zone        | +00:00              |
+------------------+---------------------+

在服务器上

+------------------+---------------------+
| Variable_name    | Value               |
+------------------+---------------------+
| system_time_zone | GMT+5               |
| time_zone        | +00:00              |
+------------------+---------------------+

does this will affect the result? OR

is there any bug in earlier version of mysql ?

请帮帮我。

最佳答案

当调用 NOW()(和相关函数)时,MySQL 将计算机的系统时钟转换为 session 时区:

  • 如果系统时钟设置为 12:30+05:30 并且 session 时区为 +00:00,则结果将为 07:00

  • 如果系统时钟设置为 17:30+05:00 并且 session 时区为 +00:00,则结果将为 12:30

但是,可以通过使用 --timezone 来“愚弄”MySQL,使其认为系统时钟与操作系统认为的时区不同。 mysqld_safe 的命令行参数:

  • 如果系统时钟设置为 17:30+10:30 并且 session 时区为 +00:00,但 MySQL 以指定的方式启动系统时钟应该理解为 GMT+5,结果将与上面的第二个项目符号相同。

因此您应该检查:

  1. 系统时钟的时区与 system_time_zone 系统变量中给定的值一致(如果不一致,请确保您没有指定 --timezone mysqld_safe 的参数,并且在 mysqld_safe> 时没有设置 TZ 环境变量/em> 被调用);

  2. 系统时钟报告其指定时区的正确时间。

关于mysql NOW() 返回错误值,而全局时区设置为 +00 :00,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11289323/

有关mysql NOW() 返回错误值,而全局时区设置为 +00 :00的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  3. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  4. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  5. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  6. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  7. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  8. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  9. ruby - 检查字符串是否包含散列中的任何键并返回它包含的键的值 - 2

    我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案

  10. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

随机推荐