4

我观察到了这个奇怪的问题。插入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 次,其中大约前 1/3ish 以时间 0 插入,其余的都很好。有人知道为什么会这样吗?

4

1 回答 1

2

在这里猜测......但它似乎在数字上下文中(比如,如果你将一个数字添加到返回值),NOW()返回一个看起来像时间戳的数字(不是秒数!)。就像,今天它可能会回来20120409161530.000000。现在...根据 的值$i,这似乎很容易导致无效值。我的意思是,如果是这样666666呢?你最终会得到20120409828196.000000,这作为时间戳没有任何意义......而且我很确定 MySQL 只是将无效值变为 0。

您可能需要考虑类似NOW() + INTERVAL $i SECOND, 并将其重新定义$i为秒数(或分钟、天、甚至几年,如果您愿意...只需更改SECOND为您决定的任何内容)。你得到的时间不太可能一团糟。

于 2012-04-09T20:17:29.573 回答