2017-07-08 5 views
3

Ich habe den folgenden Fehler. Jemand versteht warum?PHP Artisan migrieren fehlschlägt Laravel

php Handwerkers

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`)) 

create_users_table.php wandern

Schema::create('users', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('name',255); 
    $table->string('email',255)->unique(); 
    $table->string('password',255); 
    $table->rememberToken(); 
    $table->timestamps(); 
}); 
+0

Es ist wegen des Charakters in Gebrauch gesetzt mit 'email' Feld. 1 Zeichen ist nicht 1 Byte, es ist * wahrscheinlich * 4 Byte. Wenn Sie versuchen, dieses Feld eindeutig zu machen, schlägt es fehl, da die Spalte für die Indizierung zu lang ist. Die Lösung dieses Problems besteht in der Erstellung einer weiteren Spalte, die einen ** Hash ** der 'email' enthält. Sie können die Spalte "email_hash binary (20)" erstellen und dann den rohen 'sha1'-Hash der E-Mail dort speichern und so einzigartig machen. Das macht Ihren Index immer 20 Byte lang und funktioniert für Ihren Anwendungsfall. –

Antwort

1

Sie tun müssen, ist Ihre AppServiceProvider.php auf App\Providers\AppServiceProvider-Datei und in der Boot-Methode gesetzt Zeichenfolge eine Standard bearbeiten Länge:

use Illuminate\Support\Facades\Schema; 

public function boot() 
{ 
    Schema::defaultStringLength(191); 
} 

dann die Datenbank löschen manuell dann composer dump-autoload und php artisan migrate

1

bearbeiten AppServiceProvider.php Datei, werden Sie diese Datei

use Illuminate\Support\Facades\Schema; 

public function boot() 
{ 
    Schema::defaultStringLength(191); 
} 

Dann

composer update 

auf Ihrem Terminal laufen in app/Providers/AppServiceProvider.php finden. Dann versuche dein Script zu migrieren, es würde dein Problem lösen.

0

Dank all Nachricht

mit dem nächsten Code Entschlossen:

in config/database.php in mysql section 


'charset' => 'utf8mb4', 
'collation' => 'utf8mb4_unicode_ci', 
and replace them with with 

'charset' => 'utf8', 
'collation' => 'utf8_unicode_ci', 
Verwandte Themen