这是我正在运行的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?
答案 0 :(得分:0)
您已超出UNIXTIME的限制。 3586767203是'太阳,2083年8月29日12:13:23 GMT'并且UNIXTIME不能大于解析为'2038-01-18 22:14:07'的日期(FROM_UNIXTIME(2147483647)),因为时间是在纪元(1970年1月1日)之后存储为带符号的32位整数秒,在纪元之后的2 ^ 31秒存储为'Tue,2038年1月19日03:14:08 GMT'。
有关此问题的解释,请参阅http://en.wikipedia.org/wiki/Year_2038_problem。