Problema al ejecutar migraciones en Laravel

Publicado por Lynn
hace 11 meses

Hola a todos, Estoy teniendo problemas al ejecutar migraciones en Laravel. Estoy trabajando en un proyecto y necesito crear una tabla en mi base de datos. Sin embargo, cuando ejecuto el comando "php artisan migrate", obtengo el siguiente error:

"Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email))"

He investigado un poco y parece que esto se debe a una limitación en la longitud máxima de las claves en InnoDB. Intenté agregar la siguiente línea en el archivo 'AppServiceProvider.php' para ajustar la longitud máxima:

use Illuminate\Support\Facades\Schema;

public function boot() { Schema::defaultStringLength(191); },

Sin embargo, el error persiste. ¿Alguien ha tenido este problema antes y sabe cómo solucionarlo? Aprecio toda la ayuda que puedan brindarme. ¡Gracias!

Laravel migraciones error
Respuesta de Gordon Shumway
hace 11 meses

¡Hola Lynn!

El problema que estás enfrentando es común cuando se trabaja con versiones de MySQL anteriores a la 5.7.7 o MariaDB anteriores a la 10.2.2, que no soportan el tamaño de clave por defecto que establece Laravel con el motor de almacenamiento InnoDB.

El código que pusiste en tu AppServiceProvider.php es correcto, pero asegúrate de que se encuentra dentro del método boot y que has importado la clase Schema en la parte superior del archivo como muestro en el ejemplo completo:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Schema::defaultStringLength(191);
    }

    // ...
}

Después de agregar esa línea, asegúrate de:

  1. Limpiar la caché de configuración con php artisan config:clear.
  2. Volver a ejecutar las migraciones. Si has ejecutado las migraciones anteriormente y han fallado, es posible que necesites hacer un rollback o si estás en un ambiente de desarrollo donde no te importa perder los datos, podrías hacer un php artisan migrate:fresh.

Si aun así obtienes el mismo error y tu versión de MySQL/MariaDB es la adecuada, verifica que estás editando el proveedor de servicios correcto (AppServiceProvider) y que no hay otro error en la configuración que esté causando problemas.

Espero que esto resuelva tu problema. ¡Suerte con tu proyecto!