Rumah >pembangunan bahagian belakang >tutorial php >Menyelesaikan Ralat SQLSTATE[ dalam Laravel Migrations: Key Length Issue
Jika anda bekerja dengan Laravel dan menghadapi ralat SQLSTATE[42000] yang digeruni semasa migrasi, anda tidak bersendirian. Ralat ini biasanya timbul disebabkan oleh isu panjang utama apabila menggunakan MySQL sebagai pangkalan data anda. Dalam blog ini, kami akan menyelidiki ralat dan menyediakan penyelesaian langkah demi langkah yang jelas.
Apabila menjalankan migrasi, anda mungkin melihat ralat seperti ini:
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
Sebagai contoh, arahan migrasi berikut gagal:
php artisan migrate
? Butiran Ralat
Ini berlaku apabila Laravel cuba mencipta indeks unik pada lajur, seperti e-mel, dalam jadual pengguna. Panjang rentetan lalai sebanyak 255 aksara melebihi panjang kunci maksimum yang dibenarkan oleh konfigurasi MySQL anda, terutamanya apabila menggunakan set aksara utf8mb4 (yang menyokong emoji).
Untuk menyelesaikan isu ini, anda boleh menentukan set aksara dan penyusunan jadual anda dalam fail pemindahan. Begini cara anda boleh melakukannya:
Langkah 1: Buka Fail Migrasi
Cari fail migrasi yang menyebabkan isu, contohnya:
pangkalan data/migrasi/0000_00_00_000000_create_users_table.php
Langkah 2: Tambahkan Charset dan Pengumpulan
Ubah suai kaedah up() dalam fail migrasi untuk memasukkan charset dan sifat penyusunan:
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'; });
⁉️ Mengapa Ini Berfungsi
Dengan menetapkan charset kepada utf8 dan pengumpulan kepada utf8_unicode_ci, anda mengurangkan panjang bait maksimum bagi setiap aksara, dengan itu mengelakkan isu panjang kunci. Penyelesaian ini menukar sokongan untuk aksara berbilang bait tertentu (seperti emoji) untuk keserasian.
Jika anda ingin memastikan isu ini tidak berlaku dalam migrasi lain, anda boleh menentukan panjang rentetan lalai dalam AppServiceProvider:
Langkah 1: Buka AppServiceProvider
Navigasi ke app/Providers/AppServiceProvider.php.
Langkah 2: Kemas kini Kaedah But
Tambahkan kod berikut pada kaedah but:
use Illuminate\Support\Facades\Schema; public function boot() { Schema::defaultStringLength(191); // Shorten the default string length }
Pendekatan ini mengurangkan panjang rentetan untuk semua migrasi secara global.
Ralat SQLSTATE[42000] semasa migrasi boleh menjadi batu penghalang, tetapi dengan pembetulan ini, anda boleh menyelesaikannya dengan cepat dan terus membina aplikasi Laravel anda. Sama ada anda memilih untuk melaraskan migrasi tertentu atau menetapkan panjang rentetan lalai global, anda kini mempunyai alatan untuk menangani isu ini dengan berkesan.
Adakah anda menghadapi ralat yang sama semasa pembangunan Laravel? Bagaimana anda menyelesaikannya? Kongsi pengalaman anda dalam komen di bawah!
Selamat pengekodan! ?
Atas ialah kandungan terperinci Menyelesaikan Ralat SQLSTATE[ dalam Laravel Migrations: Key Length Issue. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!