我发现了这个奇怪的问题。插入now()
很好,但在向now()
添加数字时,有时会插入0.这似乎是随机的。
这是查询
mysql_query("INSERT INTO action_data (user_id, value, create_time, site_id) VALUES (807809, 20, now()+$i, 409666)");
表:ENGINE=InnoDB AUTO_INCREMENT=164865 DEFAULT CHARSET=latin1
mysql_version
+-------------------------+------------------------------------------+
| Variable_name | Value |
+-------------------------+------------------------------------------+
| innodb_version | 1.0.13-11.6 |
| protocol_version | 10 |
| version | 5.1.52-rel11.6-log |
| version_comment | Percona Server (GPL), 11.6, Revision 140 |
| version_compile_machine | x86_64 |
| version_compile_os | unknown-linux-gnu |
+-------------------------+------------------------------------------+
我在一个循环中运行了100次,并且在时间0中插入了大约1/3的它们,其余的都很好。有人知道为什么会这样吗?
答案 0 :(得分:2)
在这里猜测......但它似乎在数字上下文中(比如说,如果你在返回值中添加一个数字),NOW()
会返回一个看上去时间戳的数字(不是秒数!) 。就像,今天它可能会返回20120409161530.000000
。现在......取决于$i
的值,似乎这很容易造成无效值。我的意思是,如果是666666
怎么办?你最终会得到20120409828196.000000
,这对于时间戳来说毫无意义......而且我很确定MySQL只是将无效值变为0。
您可能需要考虑NOW() + INTERVAL $i SECOND
之类的内容,并将$i
重新定义为秒数(或分钟数,天数,甚至数年,如果您愿意...只需更改SECOND
无论你做出什么决定)。由此产生的时间不太可能导致所有混乱。