Heim >Backend-Entwicklung >PHP-Tutorial >Behebung des SQLSTATE[-Fehlers bei Laravel-Migrationen: Problem mit der Schlüssellänge

Behebung des SQLSTATE[-Fehlers bei Laravel-Migrationen: Problem mit der Schlüssellänge

Susan Sarandon
Susan SarandonOriginal
2024-12-31 17:30:15456Durchsuche

Resolving the SQLSTATE[ Error in Laravel Migrations: Key Length Issue

Wenn Sie mit Laravel arbeiten und bei Migrationen auf den gefürchteten SQLSTATE[42000]-Fehler stoßen, sind Sie nicht allein. Dieser Fehler tritt normalerweise aufgrund eines Problems mit der Schlüssellänge auf, wenn Sie MySQL als Datenbank verwenden. In diesem Blog gehen wir näher auf den Fehler ein und bieten eine klare Schritt-für-Schritt-Lösung.

☠️ Das Problem: Problem mit der Schlüssellänge von SQLSTATE[42000].

Beim Ausführen von Migrationen wird möglicherweise ein Fehler wie dieser angezeigt:

SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes

Zum Beispiel schlägt der folgende Migrationsbefehl fehl:

php artisan migrate

? Fehlerdetails
Dies geschieht, wenn Laravel versucht, einen eindeutigen Index für eine Spalte, z. B. E-Mail, in der Benutzertabelle zu erstellen. Die Standardzeichenfolgenlänge von 255 Zeichen überschreitet die in Ihrer MySQL-Konfiguration maximal zulässige Schlüssellänge, insbesondere bei Verwendung des Zeichensatzes utf8mb4 (der Emojis unterstützt).

? Die Lösung: Tabellenzeichensatz und Sortierung anpassen

Um dieses Problem zu beheben, können Sie den Zeichensatz und die Sortierung für Ihre Tabellen in den Migrationsdateien angeben. So können Sie es machen:

Schritt 1: Öffnen Sie die Migrationsdatei
Suchen Sie die Migrationsdatei, die das Problem verursacht, zum Beispiel:
Datenbank/Migrationen/0000_00_00_000000_create_users_table.php

Schritt 2: Zeichensatz und Sortierung hinzufügen
Ändern Sie die up()-Methode in der Migrationsdatei, um die Zeichensatz- und Sortiereigenschaften einzuschließen:

Schema::create('users', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('email')->unique();
    $table->string('password');
    $table->timestamps();

    // Add charset and collation
    $table->charset = 'utf8';
    $table->collation = 'utf8_unicode_ci';
});

⁉️ Warum das funktioniert
Indem Sie den Zeichensatz auf utf8 und die Sortierung auf utf8_unicode_ci festlegen, reduzieren Sie die maximale Bytelänge pro Zeichen und vermeiden so das Problem der Schlüssellänge. Bei dieser Lösung wird die Unterstützung für bestimmte Multibyte-Zeichen (wie Emojis) aus Gründen der Kompatibilität aufgegeben.

? Eine alternative Lösung: Stringlänge global verkürzen

Wenn Sie sicherstellen möchten, dass dieses Problem bei anderen Migrationen nicht auftritt, können Sie im AppServiceProvider eine Standardzeichenfolgenlänge definieren:

Schritt 1: AppServiceProvider öffnen
Navigieren Sie zu app/Providers/AppServiceProvider.php.

Schritt 2: Aktualisieren Sie die Boot-Methode
Fügen Sie der Boot-Methode den folgenden Code hinzu:

use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191); // Shorten the default string length
}

Dieser Ansatz reduziert die Zeichenfolgenlänge für alle Migrationen global.

Abschluss

Der SQLSTATE[42000]-Fehler bei Migrationen kann ein Stolperstein sein, aber mit diesen Korrekturen können Sie ihn schnell beheben und mit der Erstellung Ihrer Laravel-Anwendung fortfahren. Unabhängig davon, ob Sie bestimmte Migrationen anpassen oder eine globale Standardzeichenfolgenlänge festlegen möchten, verfügen Sie jetzt über die Tools, um dieses Problem effektiv zu lösen.

? Teilen Sie Ihre Gedanken

Sind Sie während der Laravel-Entwicklung auf ähnliche Fehler gestoßen? Wie haben Sie sie gelöst? Teilen Sie Ihre Erfahrungen in den Kommentaren unten!

Viel Spaß beim Codieren! ?

Das obige ist der detaillierte Inhalt vonBehebung des SQLSTATE[-Fehlers bei Laravel-Migrationen: Problem mit der Schlüssellänge. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn