Laravel – Specified key was too long error
Syntax error or access violation: 1071. Specified key was too long.
Creando un proyecto personal me tope con el error specified key was too long: max key is 767 bytes , investigando un poco encontré que se debe a que laravel a cambiado su character set a utf8mb4 y que solo afecta a los proyectos nuevos que no estén usando MySQL v5.7.7 o que estén usando MariaDB menor a 10.2.2.
Ahora bien cual seria la solución aquí ?
La solución la encontré en el mismo blog de noticias de laravel.
Para solucionarlo solo tenemos que editar nuestro AppServiceProvider.php de la siguiente manera, en el método boot poner una longitud por defecto y con eso debería quedar solucionado. El archivo AppServiceProvider.php se encuentra en app>providers.
Tambien debemos incuir Illuminate\Support\Facades\Schema en la parte superor debajo de nuestro namespace.
use Illuminate\Support\Facades\Schema;
En el metodo boot agregue la linea Schema::defaultStringLength(191);
AppServiceProvider.phpuse Illuminate\Support\Facades\Schema; public function boot() { Schema::defaultStringLength(191); }
Nuestro archivo AppServiceProvider.php quedaría así si es que recién estamos empezando con la aplicación.
AppServiceProvider.php<?php namespace App\Providers; use Illuminate\Support\Facades\Schema; use Illuminate\Support\ServiceProvider; 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() { // } }
Recuerde que ya le había dado este error por lo tanto va a tener que ir a la base de datos y borrar las tablas en la base de datos y luego si correr php artisan migrate.
De no hacer esto le dará un error de already exist aquí una imagen de ese error
ejemplo de Base table or view already exists:1050
La otra solución para que no de el error seria instalando una versión mas nueva de mysql o de MariaDB. Este error esta relacionado con la instalación de laravel, otra solución es instalar homstead y así no usar XAMPP, WAMP o LAMP para sus pruebas.
Fuentes de la solución:
https://laravel-news.com/laravel-5-4-key-too-long-error
https://laravel.com/docs/master/migrations#creating-indexes