Ce problème est causé dans Laravel 5.4 par la version de la base de données.
Selon le docs (dans le Index Lengths & MySQL / MariaDB
section) :
Laravel utilise le utf8mb4
par défaut, qui comprend prise en charge du stockage des "emojis" dans la base de données. Si vous exécutez une version de MySQL plus ancienne que la version 5.7.7 ou de MariaDB plus ancienne que la version 10.2.2, vous devrez peut-être configurer manuellement la longueur par par défaut générée par les migrations pour que MySQL puisse créer des pour elles. Vous pouvez configurer cela en appelant la fonction Schema::defaultStringLength
à l'intérieur de votre AppServiceProvider
.
En d'autres termes, en <ROOT>/app/Providers/AppServiceProvider.php
:
// Import Schema
use Illuminate\Support\Facades\Schema;
// ...
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
// Add the following line
Schema::defaultStringLength(191);
}
// ...
}
Mais comme le dit le commentaire de l'autre réponse :
Soyez prudent avec cette solution. Si vous indexez des champs d'email par exemple, les emails stockés ne peuvent avoir qu'une longueur maximale de 191 caractères. C'est moins que ce qu'indique le RFC officiel.
La documentation propose donc également une autre solution :
Alternativement, vous pouvez activer l'option innodb_large_prefix
pour votre base de données. Consultez la documentation de votre base de données pour savoir comment comment activer correctement cette option.