2010-03-29 14 views
6

Tengo una tabla en la que quiero registrar la marca de tiempo de cada pedido en cada momento de inserción. Sin embargo, obtengo valores cero para las marcas de tiempo.MySQL: NOW() dándome ceros

Aquí es mi esquema:

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) 

Respuesta

3

"La cláusula valor predeterminado en una especificación de tipo de datos indica un valor predeterminado para una columna Con una excepción, el valor por defecto debe ser una constante, no puede ser una función. . o una expresión Esto significa, por ejemplo, que no se puede establecer el valor predeterminado para una columna de fecha para ser el valor de una función como NOW() o CURRENT_DATE"

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

usted va a tiene que nombrar la colum n en su consulta de inserción y pase Now() como valor.

+9

Se quedaron fuera el bit más útil, ¿verdad? "La excepción es que puede especificar CURRENT_TIMESTAMP como predeterminado para una columna TIMESTAMP. Consulte la Sección 10.3.1.1," Propiedades de TIMESTAMP "(http://dev.mysql.com/doc/refman/5.1/en/timestamp.html) " –

+0

+1 @ T.K. Crowder, debe haber perdido ese ... ¡gracias! – Fabian

2

Asegúrese de que no esté insertando filas con una fecha de vacío:

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

Lo anterior podría insertar una fecha 0000-00-00 00:00:00.


Los siguientes trabajos como se esperaba en 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) 
Cuestiones relacionadas