2016-02-13 190 views
1
mysql> describe taps; 
+-------------+-------------+------+-----+-------------------+-------+ 
| Field  | Type  | Null | Key | Default   | Extra | 
+-------------+-------------+------+-----+-------------------+-------+ 
| tag_id  | int(11)  | NO |  | NULL    |  | 
| time_stamp | timestamp | NO |  | CURRENT_TIMESTAMP |  | 
| device_id | varchar(45) | YES |  | NULL    |  | 
| device_type | varchar(45) | YES |  | NULL    |  | 
+-------------+-------------+------+-----+-------------------+-------+ 

mysql> INSERT INTO `taps` (tag_id, time_stamp) VALUES(0, 1451610061); 
ERROR 1292 (22007): Incorrect datetime value: '1451610061' for column 'time_stamp' at row 1 

原因?我发现了许多类似的问题,但不是他们看起来非常黑白。Mysql无效的日期时间格式:1292错误的日期时间值

1451610061有效的时间戳。我在http://www.unixtimestamp.com/检查它,并按预期进行评估。

那么,为什么MySql不喜欢它呢?

+1

为什么您直接使用'1451610061'到您的查询?尝试先将其格式化为已创建的字段。 –

回答

4

MySQL timestamp格式为2016-02-13 15:48:29Y-m-d H:i:s首先将您的timestamp转换为该格式,然后MySQL将接受它。

如果您插入的新记录没有定义时间戳,然后从该表中选择该行,您将注意到这是它为新default记录提供的格式。

如果,如果你想将它转换成直接在查询中使用:

INSERT INTO `taps` (tag_id, time_stamp) VALUES(0, from_unixtime('1451610061')); 

使用this Q&A on StackOverflow作为参考。 和from_unixtime documentation

+1

D;哦!我一度认为它是一个整数,代表了这个时代的秒数。很长的编码会议后很累。感谢您的清醒:-) – Mawg