2012-04-09 5 views
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      | 
+-------------------------+------------------------------------------+ 

私はループで、そのうちの1/3ish最初の約100倍にして挿入され、それを実行しました時間0とそれらの残りの部分は問題ありません。なぜそれが起こっているのか誰もが知っていますか?

+1

いつどこで '$ i'を初期化しますか? – mc10

+0

'$ i'はどのように入力/計算されますか? – hjpotter92

+0

$ iはforループのインデックス0-99です。私はcHaoの答えが理にかなっていると思います。試してみます – user1322614

答えて

2

ここで推測しますが、数字の文脈(戻り値に数値を追加する場合など)のように見えますが、NOW()はタイムスタンプ式の数字を返します(秒数ではありません)。今日のように、それは20120409161530.000000を返すかもしれません。今... $iの値によると、これは簡単に無効な値になる可能性があります。つまり、もしそれが666666ならどうですか?あなたはタイムスタンプとして意味をなさない20120409828196.000000、で終わるだろう...と私はあなたがNOW() + INTERVAL $i SECONDのようなものを検討したい、とに$iを再定義することがあり、MySQLがちょうど0

に無効な値が変わることをかなり確信していますあなたが好きならば秒数(または分、日、さらには年...あなたが決めたものにSECONDを変更するだけです)。あなたの結果の時間は、すべての混乱を起こす可能性が低いです。

+0

あなたの推測は正しいです! – user1322614

関連する問題