Woher kommt der Fehler?

Laravel hat in der Version 5.4 eine Veränderung in dem Standard Charset der Datenbanken gemacht. Dieses ist jetzt utf8mb4, damit auch etwa Emojis gesichert werden können.
This only affects new applications and as long as you are running MySQL v5.7.7 and higher you do not need to do anything.

Für alle, welche MariaDB oder MySQL in einer Version niedriger als v5.7.7 verwenden, könnte der folgende Fehler bei migrationen auftreten:

[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



Fehler beheben

Um den Fehler zu beheben, genügt es eine kleine Änderung in der AppServiceProvider.php durchzuführen und innerhalb der boot() Funktion eine Standard Zeichenlänge hinzuzufügen

use Illuminate\Support\Facades\Schema;
public function boot() {
  Schema::defaultStringLength(191);
}

Danach sollte alles wie gehabt funktionieren. Achtung: es kann sein, dass die Migration nicht erneut durchgeführt werden kann, da Teile der Tabelle bereits angelegt wurden.
php artisan migrate:fresh macht somit alle Migrationen rückgängig – bedeutet komplett Datenverlust!
php artisan migrate:rollback macht den letzten Schritt rückgängig.

Andreas Pabst hat 4,90 von 5 Sternen 106 Bewertungen auf ProvenExpert.com