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に再定義することをお勧めします。結果として生じる時間は、すべてが台無しになる可能性が低くなります。$iSECOND

于 2012-04-09T20:17:29.573 に答える