这是我正在运行的 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?
最佳答案
您已经超出了 UNIXTIME 的限制。 3586767203 是 'Sun, 29 Aug 2083 12:13:23 GMT' 并且 UNIXTIME 不能大于解析为 '2038-01-18 22:14:07' ( FROM_UNIXTIME(2147483647) ) 的日期,因为时间是存储为纪元(1970 年 1 月 1 日)之后秒数的有符号 32 位整数,纪元之后 2^31 秒为“Tue, 19 Jan 2038 03:14:08 GMT”。
关于c++ - MySQL FROM_UNIXTIME 命令不写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19118960/