2017-05-06 2 views
0

Ich habe dieses Problem, wenn ich Laravel-Migration verwenden, um eine Tabelle in der Datenbank zu erstellen. Ich weiß nicht, was daran falsch sein könnte, da ich denselben Befehl für mein vorheriges System verwende. Dies ist der Fehler, den ich beim Verwenden von Composer zum Erstellen der Tabelle bekommen habe.Laravel 5.4 Migration funktioniert nicht richtig

$ php artisan migrieren Migrationstabelle erfolgreich erstellt.

[Illuminate \ Database \ QueryException] SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1071 Angegebener Schlüssel war t oo lang; max Schlüssel Länge 767 Bytes (SQL: alte Tabelle users fügen einzigartige users_email_unique (email))

[PDOException] SQLSTATE [42000]: Syntaxfehler oder eine Zugriffsverletzung: 1071 Angegebene Schlüssel war t oo lang; max Schlüssellänge beträgt 767 Byte

Antwort

4

Laravel 5.4 verwendet standardmäßig utf8mb4. Eine Möglichkeit, diesen Fehler zu beheben, besteht darin, standardmäßig auf utf8 zurückzusetzen.

Gehen Sie zu Ihrem config\database.php und ändern Sie die Datenbank charset zu uft8 und der collation zu utf8_unicode_ci:

'mysql' => [ 
    //.. 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    //.. 
], 
2

Die Zeichenbegrenzung ist abhängig von dem Zeichensatz verwenden. Laravel verwendet utf8mb4, für die die Zeichengrenze des größten Index 191 ist.

Sie müssen nur Ihr Zeichenlimit setzen, um eins zu korrigieren. Lesen dieses von Laravel Index Length

Index Lengths & MySQL/MariaDB

Laravel die vorbelegt utf8mb4 Zeichen verwendet, die zum Speichern von "Emojis" in der Datenbank Unterstützung umfasst. Wenn Sie eine Version von MySQL älter als die 5.7.7 Freisetzung oder MariaDB älter als die 10.2.2 Release ausgeführt werden, müssen Sie manuell die Standard Stringlänge von Migrationen erzeugt, um so konfigurieren, MySQL Indizes für sie zu schaffen. Sie können diese konfigurieren, indem Sie die Schema::defaultStringLength Methode in Ihrem AppServiceProvider Aufruf: Alternativ

use Illuminate\Support\Facades\Schema; 

/** 
* Bootstrap any application services. 
* 
* @return void 
*/ 
public function boot() 
{ 
    Schema::defaultStringLength(191); 
} 

, können Sie die innodb_large_prefix Option für Ihre Datenbank aktivieren.Anweisungen zur richtigen Aktivierung dieser Option finden Sie in der Dokumentation zu Ihrer Datenbank unter .

+0

half es dank. –

Verwandte Themen