0

这是我正在运行的 SQL 查询:

string theQuery = "UPDATE readings SET chng = 1, time = FROM_UNIXTIME(";
theQuery += boost::lexical_cast<string>(ss.time);
theQuery += ") WHERE id = 1;";

ss.time 是一个 uint32_t,它记录自 1970 年 1 月 1 日以来的秒数。当我尝试将值“3586767203”放入 FROM_UNIXTIME 的括号中时,它是我设备上的时间值,它会将我的时间字段更新为 NULL。如果我输入一个较小的数字,它会更新时间字段。

如果我输入有效时间,为什么它会更新为 NULL?

4

1 回答 1

0

您已超出 UNIXTIME 的限制。3586767203 是 'Sun,2083 年 8 月 29 日 12:13:23 GMT' 并且 UNIXTIME 不能大于解析为 '2038-01-18 22:14:07' ( FROM_UNIXTIME(2147483647) )的日期,因为时间是在纪元(1970 年 1 月 1 日)和纪元后 2^31 秒后存储为带符号的 32 位整数秒,即“星期二,2038 年 1 月 19 日 03:14:08 GMT”。

有关此问题的说明,请参阅http://en.wikipedia.org/wiki/Year_2038_problem

于 2013-10-01T15:25:20.757 回答