Laravel Migrations - Issues while creating timestamps

12,730

Solution 1

This is due to MySQL not accepting zero as a valid default date and thus the table creation fails a constraint check on creation.

You probably have NO_ZERO_DATE enabled in your MySQL configuration. Setting this to off will allow you to create the table or alternatively remove the default 0 value or change it to CURRENT_TIMESTAMP.

You can find out more about this exact issue here: https://github.com/laravel/framework/issues/3602

Solution 2

I have been facing the same error. Given solutions does work properly still i want to help laravel developers. Simply add a following line to config/database.php

'mysql' => array(
   'strict'    => true
),

Solution 3

This is due to MySQL not accepting zero as a valid default date so you can write

$table->timestamp('created_at')->nullable();
$table->timestamp('updated_at')->nullable();

or $table->nullableTimestamps();

Instead of $table->timestamps();

Solution 4

it sounds like strict mode.

You may disable strict mode in one of two ways:

Open your my.ini file within the MySQL installation directory, and look for the text sql-mode.

Find:

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

and change to

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

or you can run the following in phpMyAdmin

SET @@global.sql_mode='';

Solution 5

This worked for me after being unsuccessful with strict mode:

$table->timestamp('published_on')->useCurrent();
Share:
12,730
cheese5505
Author by

cheese5505

hey, nice meme

Updated on June 05, 2022

Comments

  • cheese5505
    cheese5505 almost 2 years

    I am trying to run migrations on my Laravel instance. They are just the default migrations (users and password resets) but when it tries to make the timestamps it throws this error:

     [Illuminate\Database\QueryException]
     SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'created_at' (SQL: create table `
     users` (`id` int unsigned not null auto_increment primary key, `name` varchar(255) not null, `email` varchar(255) n
     ot null, `password` varchar(60) not null, `remember_token` varchar(100) null, `created_at` timestamp default 0 not
     null, `updated_at` timestamp default 0 not null) default character set utf8 collate utf8_unicode_ci)
    

    as well as a PDOException:

    SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'created_at'
    

    How can I fix this?

    Thanks.

  • Anthony
    Anthony almost 8 years
    Whilst using a Laravel derived app (Snipe-IT), this solved my problem. Much cleaner than the other choices.
  • HartleySan
    HartleySan over 5 years
    I had to set 'strict' to false, but it worked all the same. Thanks.