Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql以UTC格式从_UNIXTIME发送_Mysql_Timezone - Fatal编程技术网

Mysql以UTC格式从_UNIXTIME发送

Mysql以UTC格式从_UNIXTIME发送,mysql,timezone,Mysql,Timezone,我怎样才能得到它 FROM_UNIXTIME mysql中的UTC/GMT?在连接的时区中返回日期 我不想更改连接的时区。我的解决方案是 SELECT CONVERT_TZ(FROM_UNIXTIME(1277942400), @@session.time_zone,'UTC') 如果CONVERT_TZ返回null,请确保mysql的时区表已填充: zypper install mysql-community-server-tools mysql_tzinfo_to_sql /usr/sh

我怎样才能得到它

FROM_UNIXTIME
mysql中的UTC/GMT?在连接的时区中返回日期

我不想更改连接的时区。

我的解决方案是

SELECT CONVERT_TZ(FROM_UNIXTIME(1277942400), @@session.time_zone,'UTC')
如果CONVERT_TZ返回null,请确保mysql的时区表已填充:

zypper install mysql-community-server-tools
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

您最好提前设置时区:

SET time_zone='UTC';
select FROM_UNIXTIME(1277942400);

原因是涉及本地时区的转换可能有损。在(请参见
UNIX\u TIMESTAMP()
部分的第4段,以“Note:”开头)中有一个例子。

我知道这一点已经得到了回答,但我仍想贡献:

如果您不想让服务器使用
NOW()
FROM\u UNIXTIME()
等函数生成UTC时区时间,您必须像@Matt Johnson所说的那样设置
时区

有一件事他没有提到:
设置时区=时区仅为当前连接设置时区。
如果希望这些函数在默认情况下以UTC返回/转换日期,则可以使用
设置全局时区='+00:00'
,这样您就不必每次保存某些基于UTC的日期时都设置时区

检查当前时区设置:
选择@global.time\u zone、@session.time\u zone


如果您像我一样懒惰,不想更改全局会话时区变量(移动到另一台服务器,忘记在那里更改并跳转,您会遇到麻烦),会话变量(使用一些模块自动重新连接到db和hop,您在连接时发出的变量将消失)如果不想加载时区的东西,我想这可能会有帮助:)

即使时间戳为负数,它也能工作。如果需要转换特定列,只需将unix_timestamp()替换为包含时间戳的列即可


另外,如果您需要找出datetime和now之间的差异,而列是unix_timestamp(比如,“utc”),只需使用timestamp diff(SECOND,…,now())将其包装起来,就可以保存日期:)。

我喜欢解决方案的无状态性这是一个很好的解决方案:)它是无状态的,但由于日期不明确而失败,因为conver_ttz无法知道源时间戳的时区偏移量。@MarcLehmann所说的是正确的,但请注意,在使用DST的时区中,模糊度每年仅持续一小时。这可能是个问题,也可能不是,这取决于您的业务。如果它没有返回null,那就太好了
设置时区=“+00:00”
对我有效。如果你想保留它,请参见MārtiņšRadiņššresponse。哦,太好了,所以要查看特定时区的时间戳:
SET timeŠu zone='America/LosŠAngeles'
从活动中选择自唯一时间(插入时间)
select 
  now() as timezoned,
  date_add(
    FROM_UNIXTIME(0), interval 
      unix_timestamp()+TIMESTAMPDIFF(SECOND,NOW(),UTC_TIMESTAMP()) SECOND
  ) as utc