Error de migración de Laravel: error de sintaxis o infracción de acceso: 1071 La clave especificada era demasiado larga; La longitud máxima de la clave es 767 bytes.
Error de migración en Laravel 5.4 conphp artisan make:auth
[Illuminate\Database\QueryException] SQLSTATE[42000]: Error de sintaxis o infracción de acceso: 1071 La clave especificada era demasiado larga; la longitud máxima de la clave es 767 bytes (SQL: modificar tabla y
users
agregar únicousers_email_unique
([PDOException] SQLSTATE[42000]: Error de sintaxis o infracción de acceso: 1071 La clave especificada era demasiado larga; La longitud máxima de la clave es 767 bytes.
Según la documentación oficial de Laravel 7.x , puedes resolver esto con bastante facilidad.
Actualice su /app/Providers/AppServiceProvider.php
para que contenga:
use Illuminate\Support\Facades\Schema;
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
}
Alternativamente, puede habilitar la
innodb_large_prefix
opción para su base de datos. Consulte la documentación de su base de datos para obtener instrucciones sobre cómo habilitar correctamente esta opción.
Solo estoy agregando esta respuesta aquí porque es la quickest
solución para mí. Simplemente active el motor de base de datos 'InnoDB'
predeterminado
/config/database.php
'mysql' => [
...,
...,
'engine' => 'InnoDB',
]
luego ejecute php artisan config:cache
para borrar y actualizar el caché de configuración
EDITAR: Las respuestas encontradas aquí pueden explicar detrás de escena de este
No sé por qué la solución anterior y la solución oficial que agrega
Schema::defaultStringLength(191);
no AppServiceProvider
funcionó para mí. Lo que funcionó fue editar el database.php
archivo en config
la carpeta. Solo edita
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
a
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
y debería funcionar, aunque no podrás almacenar caracteres multibyte extendidos como emoji .
Este es un truco feo y no lo hagas si quieres almacenar cadenas en un idioma que no sea inglés, emoji.
Lo hice con Laravel 5.7.
No olvide detener e iniciar nuevamente el servidor.