> Faqs > Error migraciones Laravel SQLSTATE[42000]: Syntax error or access violation: 1071

Error migraciones Laravel SQLSTATE[42000]: Syntax error or access violation: 1071

Estoy corriendo las migraciones de un package de Laravel y me encuentro con este error.

SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes...

Parece que es un error bastante frecuente. ¿Cómo se puede solucionar?

Responder la pregunta
Editar Hacer otra preguntaPreguntar

Respuestas

Según he leído, este error se debe de producir en determinadas versiones de MySQL. He leído un post por ahí que recomendaban actualizar a MySQL 5.7 (Yo estoy corriendo MySQL 5.6 en mi sistema), pero lo he conseguido arreglar sin necesidad de hacer el upgrade de la versión de MySQL / MariaDB.

En realidad por lo que entiendo se debe a que no debe tener MySQL especificado un tamaño determinado y concreto para las longitudes de las cadenas varchar (string en las migraciones). Simplemente se le puede colocar un tamaño determinado para conseguir que no te de error al ejecutar la migración.

En resumen, la solución a este problema es tan simple como editar el archivo AppServiceProvider.php, que está en la ruta:

app/Providers/AppServiceProvider.php

En ese archivo localizamos el método boot() y agregamos una línea, que se puede ver a continuación:

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

Supongo que en vez de 191 puedes poner cualquier tamaño de string que desees como predeterminado para los campos de string que generas en las migraciones de Laravel.

Ten en cuenta que necesitas declarar que vas a usar el Facade Schema, con el correspondiente use:

use Illuminate\Support\Facades\Schema;

Con este pequeño detalle la migración ha podido funcionar perfectamente.

Esto es algo que seguramente tendrás que hacer en cada proyecto nuevo de Laravel que tenga una versión determinada de MySQL y de hecho me suena haberlo hecho ya pero como se hace una vez por proyecto, cuando empiezas otro se te ha olvidado completamente.

Julian
120 4 10 15