2011-02-26 23 views
12

Tengo una tabla con dos campos de marca de tiempo. Simplemente los definí con un nombre y el tipo TIMESTAMP, pero por alguna razón MySQL estableció automáticamente uno de ellos con un valor predeterminado y el atributo on update CURRENT_TIMESTAMP. Estaba planeando NO tener valor predeterminado en ninguno de los campos, pero uno de los campos se llama "date_updated", así que supongo que podría establecer el atributo mencionado en ese campo.¿Por qué MySQL no me permite eliminar el atributo "en la actualización CURRENT_TIMESTAMP"?

Desafortunadamente, es el campo "date_created" que se estableció con el atributo on update CURRENT_TIMESTAMP, y no importa lo que haga, MySQL no me permitirá eliminarlo.

He intentado editar el campo "date_created" y eliminar el atributo. Al hacer clic en guardar, el atributo vuelve. También intenté seleccionar ambos campos, eliminar el atributo de uno de ellos y configurarlo en el otro. Me da el error #1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause y de repente dos columnas de atributos en los valores están ajustados a on update CURRENT_TIMESTAMP el resultado:

Error 
SQL query: 

ALTER TABLE `pages` CHANGE `date_created` `date_created` TIMESTAMP NOT NULL , 
CHANGE `date_updated` `date_updated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL 

MySQL said: 

#1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause 

¿Debo realmente recrear esas dos columnas en el orden correcto para solucionar este problema?

Me gustaría saber cómo puedo resolver este problema correctamente, para referencia futura.

Gracias


Ahora también han tratado de ejecutar

ALTER TABLE pages 
CHANGE date_created 
date_created TIMESTAMP NOT NULL 

Respuesta

16

Debe especificar DEFAULT CURRENT_TIMESTAMP (o DEFAULT 0)

ALTER TABLE pages CHANGE date_created date_created TIMESTAMP NOT NULL DEFAULT 0, 
CHANGE `date_updated` `date_updated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL 
+0

es NULL DEFAULT una opción también? – GolezTrol

+0

@GolezTrol no, ya que se define como 'NOT NULL' no puede ser NULL – meze

+2

¿Siempre necesita un valor predeterminado? Me refiero a los tipos de marcas de tiempo NOT NULL. Estoy teniendo el mismo problema, pero no puedo eliminar el valor predeterminado. –

0

En MySQL versión 5.6. 6, puedes usar el explicit_defaults_for_timestamp opción en el archivo de configuración, por lo tanto, las columnas de indicación de fecha y hora no tendrán los atributos 'DEFAULT CURRENT_TIMESTAMP' o 'ON UPDATE CURRENT_TIMESTAMP' de forma predeterminada. También será posible establecer estas columnas en NULL si no están declaradas como NOT NULL.

Ver: http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_explicit_defaults_for_timestamp

Cuestiones relacionadas