I upgraded my Laravel installation to 5.4 and encountered the error below:
[Illuminate\Database\QueryException] SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was t oo long; max key length is 767 bytes (SQL: alter table `users` add unique ` users_email_unique`(`email`)) [PDOException] SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was t oo long; max key length is 767 bytes
This is actually documented in the official Laravel website here: https://laravel.com/docs/master/migrations#creating-indexes where it fixes the issue. You need to call the Schema::defaultStringLength method within your AppServiceProvider class’ boot method.
public function boot() { Schema::defaultStringLength(191); }
However, the documentation does not mention that you need to declare the Schema class at the top, or else you will encounter the error like below:
[Symfony\Component\Debug\Exception\FatalThrowableError] Class 'App\Providers\Schema' not found
So be sure to add: use Schema;
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Schema; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { Schema::defaultStringLength(191); } /** * Register any application services. * * @return void */ public function register() { // } }
Adding a backslash before Schema also works fine.
\Schema::defaultStringLength(191);
I hope this somehow helps :)