MySQL:NOW()给我零

时间:2010-03-29 15:05:15

标签: mysql datetime timestamp

我有一个表,我想在每个插入时间记录每个订单的时间戳。但是,我的时间戳值为零。

这是我的架构:

CREATE TABLE IF NOT EXISTS orders(
            order_no VARCHAR(16) NOT NULL,
            volunteer_id VARCHAR(16) NOT NULL,
            date TIMESTAMP DEFAULT NOW(),
            PRIMARY KEY (order_no),
            FOREIGN KEY (volunteer_id) REFERENCES volunteer(id)
            ON UPDATE CASCADE ON DELETE CASCADE)

2 个答案:

答案 0 :(得分:3)

“数据类型规范中的DEFAULT值子句指示列的默认值。除了一个例外,默认值必须是常量;它不能是函数或表达式。这意味着,例如,您不能将日期列的默认值设置为函数的值,例如NOW()或CURRENT_DATE“

来源:http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html

您必须在插入查询中命名该列,并将Now()作为值传递。

答案 1 :(得分:2)

确保您没有插入空日期的行:

INSERT INTO orders VALUES (1, 1, '');

以上内容会插入0000-00-00 00:00:00日期。


以下在MySQL 5.0.51a中按预期工作:

CREATE TABLE IF NOT EXISTS orders(
            order_no VARCHAR(16) NOT NULL,
            volunteer_id VARCHAR(16) NOT NULL,
            date TIMESTAMP DEFAULT NOW(),
            PRIMARY KEY (order_no));

INSERT INTO orders (order_no, volunteer_id) VALUES (1, 1);
INSERT INTO orders (order_no, volunteer_id) VALUES (2, 1);
INSERT INTO orders (order_no, volunteer_id) VALUES (3, 1);
INSERT INTO orders (order_no, volunteer_id) VALUES (4, 1);

SELECT * FROM orders;

+----------+--------------+---------------------+
| order_no | volunteer_id | date                |
+----------+--------------+---------------------+
| 1        | 1            | 2010-03-29 17:10:37 |
| 2        | 1            | 2010-03-29 17:10:40 |
| 3        | 1            | 2010-03-29 17:10:44 |
| 4        | 1            | 2010-03-29 17:10:48 |
+----------+--------------+---------------------+
4 rows in set (0.00 sec)