MySQL 计算 INT UNSIGNED 上的负值


MySQL calculating negative value on INT UNSIGNED

我的表中有一列start_date_time INT UNSIGNED

我有这样的查询

... WHERE (g.start_date_time-$currentTime) > 0 ORDER BY (g.start_date_time-$currentTime)

我收到一个错误Numeric value out of range: 1690 BIGINT UNSIGNED value is out of range in....如果我将其设置为 SIGNED,当然一切正常,但我的问题是有没有办法让它保持无符号但无论如何计算负值(我只需要计算,不需要将它们存储在任何地方),或者我应该重新定义我的查询?

我认为您应该重新定义如下

WHERE g.start_date_time > $currentTime ORDER BY g.start_date_time

这将允许g.start_date_time列上使用索引,并且您不必按 (g.start_date_time-$currentTime) 排序

您可以使用

CAST()CONVERT()将它们转换为有符号整数以进行计算。但是,如果你有比有符号整数大的东西,你会得到不需要的结果。无论如何,您都不应该使用整数作为时间戳。使用时间戳或日期时间字段。