Cómo solucionar el error "Specified key was too long error" en Laravel

Cómo solucionar el error "Specified key was too long error" en Laravel

Jorge García
Jorge García
Comparte:
Si estás buscando una solución para este 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))

[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
Podemos solucionarlo de 3 formas:
  1. Actualizar la versión de MySQL
  2. Modificar el archivo config/database
  3. Modificar el archivo  app/Providers/AppServiceProvider.php

Solución 1

Si utilizas MariaDB o versiones anteriores de MySQL v5.7.7 simplemente actualiza a la versión estable más reciente y no volverás a tener este problema.

Solución 2

Si no puedes o no quieres actualizar MySQL, intenta modificando el engine de mysql en el archivo config/database.php
'mysql' => [
    ...
    'engine' => 'InnoDB',
]

Solución 3

Si por algún motivo no te funciona la solución 2, agrega la siguiente línea al archivo  app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\Schema;

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

¿Por qué ocurre este error?

Desde la versión 5.4 de Laravel se realizó un cambio en el conjunto de caracteres predeterminado de la base de datos, y ahora es utf8mb4, que incluye soporte para almacenar emojis. 
Esto solo afecta a las aplicaciones que utilicen versiones anteriores a MySQL v5.7.7
Tiza
Tiza (204 xp)
Gracias! Y esta estupendo que por fin alguien me de una explicación de qué y por qué. Un saludo!
1
javier sanchez
javier sanchez (16 xp)
Muchísimas gracias por compartir. Estar empezando y que te salten errores de este tipo es muy desalentador. Nuevo fan tienes.

1
Gustavo Camilo
Gustavo Camilo (16 xp)
Mil gracias, usando la solución 2 pude resolverlo
Agustín Nahuel Parada
Agustín Nahuel Parada (16 xp)
gracias genio!

XMedia Software (xmediasoftware)
XMedia Software (xmediasoftware) (16 xp)
Me sirvio la opcion No. 3, muchas gracias
Sergio Vega
Sergio Vega (16 xp)
Gracias, buena ayuda rapida 👍😁
Freddy Arriaga Cruz
Freddy Arriaga Cruz (16 xp)
Gracias, ni chat GPT fue tan preciso
2