mysql中的超出范围错误

mysql中的超出范围错误,mysql,hacker-news,Mysql,Hacker News,我试图用mysql实现黑客新闻算法,但出现了以下错误 Double value is out of range in pow(((unix_timestamp() - unix_timestamp(postDateTime))/3600 + 1),1.5) Where the value of postDateTime is 2012-12-15 10:41:31 如果我按照以下方式实现上述内容: pow(((unix_timestamp() - unix_timestam

我试图用mysql实现黑客新闻算法,但出现了以下错误

    Double value is out of range in 
    pow(((unix_timestamp() - unix_timestamp(postDateTime))/3600 + 1),1.5)

Where the value of postDateTime is 2012-12-15 10:41:31
如果我按照以下方式实现上述内容:

pow(((unix_timestamp() - unix_timestamp(cast(postDateTime as signed)))/3600 + 1),1.5)

它工作得很好,但我不理解它背后的原因

您正在运行哪个版本的mysql?退房

并检查以了解为什么会出现负值:

如果在没有参数的情况下调用,则返回Unix时间戳(自 “1970-01-01 00:00:00”UTC)作为无符号整数。如果UNIX_时间戳() 使用日期参数调用,则返回参数的值 自UTC“1970-01-01 00:00:00”以来的秒数。日期可以是日期字符串, 日期时间字符串、时间戳或YYMMDD或YYMMDD格式的数字 YYYYMMDD。服务器将日期解释为当前时间中的值 分区并将其转换为UTC的内部值

如果要减去UNIX_TIMESTAMP()列,可能需要将结果强制转换为带符号整数。参见第12.10节“转换函数和运算符”


是的,这是一个列的名称,编辑过:)谢谢,但我不明白为什么我用unix_timestamp()-unix_timestamp(postDateTime)@Tarun:Is
postDateTime
a
timestamp
DATETIME
列得到了否定的结果?会话时区中的当前时间是多少
SELECT NOW()
?@eggyal它的日期时间,你是对的,mysql和php时区似乎有问题,SELECT NOW()的结果是2012-12-15 07:14:21好的。因为它是
DATETIME
,所以调用
UNIX_TIMESTAMP()
时,它被认为是会话的时区;由于会话时区中的当前时间早于
postDateTime
,因此产生的减法为负数。您可能需要适当地设置会话:
设置时区=