Laravel Migrations - Issues while creating timestamps
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();
Comments
-
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 almost 8 yearsWhilst using a Laravel derived app (Snipe-IT), this solved my problem. Much cleaner than the other choices.
-
HartleySan over 5 yearsI had to set
'strict'
tofalse
, but it worked all the same. Thanks.