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