2015-04-06 165 views
-1

我已经表中定义是这样的:不能插入unix时间戳到表的时间戳字段

CREATE TABLE tt (
    name varchar(255) DEFAULT NULL, 
    date timestamp NULL DEFAULT NULL 
) 
ENGINE = INNODB 
CHARACTER SET utf8 
COLLATE utf8_general_ci; 

现在我试图插入一条记录:

INSERT INTO tt (name, date) VALUES('some', UNIX_TIMESTAMP(now())); 

并得到以下错误:

Incorrect datetime value: '1428306271' for column 'date' at row 1 

这怎么可能?

编辑
此选项还产生一个错误:

INSERT INTO tt (name, date) VALUES('some', UNIX_TIMESTAMP()); 
+0

你想在表格中插入数据的格式 – Saty 2015-04-06 07:50:13

回答

1

正确的语法是

INSERT INTO tt (name, date) VALUES('some', now()); 

date timestamp NULL DEFAULT NULL将接受值 yyyy-mm-dd H:i:s

+0

谢谢,它使用'now()',但它插入值为'4/6/2015 10:59:33 AM'。我可以将值作为unix时间戳插入吗,例如'1428306271'? – 2015-04-06 08:00:47

+1

在这种情况下,数据类型应该是“int”或“varchar”。但是我会建议使用'Y-m-d H:i:s',因为后来用范围进行查询,查找特定年份的数据等将比存储整数值更简单。 – 2015-04-06 08:03:19

+0

正确,谢谢,如果我从客户端获得的值是'1428306271',我可以在插入时使用'FROM_UNIXTIME1428306271',在查询时''UNIX_TIMESTAMP(date)',对吗?你还会建议使用'datetime'字段类型还是'timestamp'? – 2015-04-06 08:06:58

0

如果您想要hav在格式2015-04-06 13:24:42中字段中的当前日期时间,您不应该要求将此字段添加到查询中,因为它会自动将此格式的当前日期时间值更新为数据库。所以你的查询将是:INSERT INTO tt(name)VALUES('some');

假设当前日期时间是2015-04-06 13:24:42所以这会自动更新到你的日期字段ind数据库。

它将按照UTC时间。

+0

我不希望它自动更新 – 2015-04-06 08:02:45