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.

Resuelto abSiddique asked hace 7 años • 39 respuestas

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 usersagregar único users_email_unique( email))

[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.

abSiddique avatar Feb 15 '17 15:02 abSiddique
Aceptado

Según la documentación oficial de Laravel 7.x , puedes resolver esto con bastante facilidad.

Actualice su /app/Providers/AppServiceProvider.phppara 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_prefixopció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.

abSiddique avatar Feb 15 '2017 09:02 abSiddique

Solo estoy agregando esta respuesta aquí porque es la quickestsolución para mí. Simplemente active el motor de base de datos 'InnoDB'predeterminado

/config/database.php

'mysql' => [
    ...,
    ...,
    'engine' => 'InnoDB',
 ]

luego ejecute php artisan config:cachepara borrar y actualizar el caché de configuración

EDITAR: Las respuestas encontradas aquí pueden explicar detrás de escena de este

Dexter Bengil avatar Oct 09 '2017 07:10 Dexter Bengil

No sé por qué la solución anterior y la solución oficial que agrega

Schema::defaultStringLength(191);

no AppServiceProviderfuncionó para mí. Lo que funcionó fue editar el database.phparchivo en configla 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.

Koushik Das avatar Sep 17 '2017 08:09 Koushik Das