mysql utc timestamp,如何在MySQL中从UNIX_TIMESTAMP()获取UTC日期时间

I want to know that how to get utc datetime from unix_timestamp in mysql.

But, I should not use CONVERT_TZ.

(because Could not use timezone function in partitioning.)

The error occurs in the SQL schema...

CREATE TABLE `table` (

`idx` BIGINT(20) NOT NULL,

etc...

) ENGINE=InnoDB DEFAULT CHARSET=utf8

PARTITION BY RANGE( YEAR(CONVERT_TZ(from_unixtime(`idx` >> 24), @@session.time_zone, '+00:00')) )

SUBPARTITION BY HASH ( MONTH(CONVERT_TZ(from_unixtime(`idx` >> 24), @@session.time_zone, '+00:00')) )

SUBPARTITIONS 12 (

PARTITION p2016 VALUES LESS THAN (2016),

PARTITION p2017 VALUES LESS THAN (2017),

PARTITION p2018 VALUES LESS THAN (2018),

PARTITION p2019 VALUES LESS THAN (2019),

PARTITION p2020 VALUES LESS THAN (2020)

)

解决方案

I think your problem is not CONVERT_TZ, but FROM_UNIXTIME.

FROM_UNIXTIME takes an Integer as argument - which means 32 bit.

If you take todays unix-timestamp: 1480546792, shifted right 24 bit - you are just exceeding the 32-bit limit for a valid parameter on unix_time.

from_unixtime can only handle parameters upto 2147483647 - Which means, it works up until 2038-01-19 04:14:07

I've encountered this problem as well, and since 2002 a fix for this is "under development".

Until it has finally be resolved, you should use a workaround, using date_add. Instead of

from_unixtime (x)

use

date_add(from_unixtime(0), INTERVAL x second)

Result(s):

SELECT from_unixtime (2147483647); //2038-01-19 04:14:07

SELECT from_unixtime (2147483648); //NULL

SELECT date_add(from_unixtime(0), Interval 2147483647 second) //2038-01-19 04:14:07

SELECT date_add(from_unixtime(0), Interval 2147483648 second) //2038-01-19 04:14:08

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值