Saltar al contenido

No se puede establecer la fecha por defecto en CURRENT_TIMESTAMP en MySQL 5.5

Puede que se de el caso de que halles algún error con tu código o proyecto, recuerda probar siempre en un ambiente de testing antes subir el código al trabajo final.

Solución:

Del manual de MySQL 5.5:

No puede establecer que el valor predeterminado de una columna de fecha sea el valor de una función como NOW() o CURRENT_DATE. La excepción es que puede especificar CURRENT_TIMESTAMP como predeterminado para una columna TIMESTAMP.

Por lo tanto, lo que quiere lograr funcionará en MySQL 5.5 si agrega un TIMESTAMP columna en lugar de una DATE columna.

Los cambios en 5.6.x que permiten la funcionalidad se documentan aquí, y citaré el resumen relevante para completarlo:

A partir de MySQL 5.6.5, las columnas TIMESTAMP y DATETIME se pueden inicializar y actualizar automáticamente a la fecha y hora actuales (es decir, la marca de tiempo actual). Antes de 5.6.5, esto es true solo para TIMESTAMP, y como máximo una columna TIMESTAMP por tabla.

Revisa esta respuesta.

Tus opciones son:

  • Actualizar a MySQL 5.6.5
  • Cambie el tipo de columna a TIMESTAMP, como en:

    ALTER TABLE `downloads` ADD `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
    
  • Cree un DISPARADOR QUE actualice la columna automáticamente:

    ALTER TABLE `downloads` ADD `date` DATETIME NULL; -- date must allow
                                                      -- NULLs or default
                                                      -- to a special value
    DROP TRIGGER IF EXISTS downloads_BI;
    DELIMITER //
    CREATE TRIGGER downloads_BI
    BEFORE INSERT ON downloads FOR EACH ROW
    BEGIN
        IF (NEW.date IS NULL) THEN -- change the isnull check for the default used
            SET NEW.date = now();
        END IF;
    END//
    DELIMITER ;
    

    Es posible que también desee crear un valor de actualización, si debe actualizarse automáticamente en la actualización o desea evitar null valores.

    mysql> INSERT INTO downloads (i) VALUES (1); -- I do not set date
    Query OK, 1 row affected (0.00 sec)
    
    mysql> SELECT * FROM downloads;
    +------+---------------------+
    | i    | date                |
    +------+---------------------+
    |    1 | 2016-03-22 09:27:52 |
    +------+---------------------+
    1 row in set (0.00 sec)
    

Acuérdate de que tienes concesión de interpretar si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *