Blog de programación, errores, soluciones

Chose Language:
Author: Admin/Publisher |finished | checked

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.php
use 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

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

Category: laravel
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category