我想知道如何在mysql中从unix_timestamp中获取utc datetime。
但是,我不应该使用CONVERT_TZ。
(因为无法在分区中使用时区函数。)
错误发生在SQL架构中...
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)
)发布于 2016-12-01 07:10:44
我认为你的问题不是CONVERT_TZ,而是FROM_UNIXTIME。
FROM_UNIXTIME接受一个整数作为参数-这意味着32位。
如果你使用今天的unix-timestamp:1480546792,右移24位--你刚刚超过了unix_time上有效参数的32位限制。
from_unixtime只能处理直到2147483647的参数-这意味着它在2038-01-19 04:14:07之前一直有效
我也遇到过这个问题,自2002年以来,这个问题的一个修复程序正在“开发中”。
在该问题最终得到解决之前,您应该使用一种变通方法,即使用date_add。而不是
from_unixtime (x)使用
date_add(from_unixtime(0), INTERVAL x second)结果:
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:08https://stackoverflow.com/questions/40899761
复制相似问题