Aller au contenu
Patrick Junod Patrick Junod

Corriger l'erreur Syntax error or access violation: 1071 La clé est trop longue. Longueur maximale: 1000

Depuis Laravel 5.4, un changement au jeu de caractères par défaut de la base de données (utf8mb4 qui inclut le support pour le stockage des emojis) risque de vous poser quelques problèmes lors de l'installation de votre BDD MySQL ou MariaDB.
Programmation Laravel

Ce soucis n'affecte que les nouvelles applications avec une version de MySQL inférieure à v5.7.7.

Vous allez rencontrer cette erreur lorsque vous essayez d'exécuter des migrations :

[Illuminate\Database\QueryException]   
SQLSTATE[42000]: Syntax error or access violation: 1071 La clé est trop longue. Longueur maximale: 1000 (SQL: alter table `users` add unique `users_email_unique`(`email`))
SQL

Pour corriger ce problème, vous avez deux solutions: Mettre MySQL à jour (recommandé) ou modifier votre fichier AppServiceProvider.php et définir une longueur de chaîne par défaut dans la méthode boot:

app/Providers/AppServiceProvider.php

// Inclure la facade "Schema"
use Illuminate\Support\Facades\Schema;

// dans la méthode boot(), inclure la ligne suivante
public function boot()
{
    Schema::defaultStringLength(191);
}
PHP

Après cela, tout devrait fonctionner normalement.

N'oubliez pas de vider votre base de donnée avant de refaire la migration, sans quoi vous vous retrouverez avec une erreur.