Rumah >pangkalan data >tutorial mysql >Ralat Migrasi Laravel: Bagaimana untuk Membetulkan Isu 'Kunci Ditentukan Terlalu Panjang'?

Ralat Migrasi Laravel: Bagaimana untuk Membetulkan Isu 'Kunci Ditentukan Terlalu Panjang'?

Barbara Streisand
Barbara Streisandasal
2024-12-16 04:16:13878semak imbas

Laravel Migration Error: How to Fix the

Ralat Migrasi Laravel: Menangani Isu "Kunci Ditentukan Terlalu Panjang"

Apabila cuba menggunakan php artisan Laravel 5.4 make:auth arahan, pengguna mungkin menghadapi perkara berikut ralat:

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

Punca:

Ralat berlaku apabila panjang kekunci indeks melebihi panjang maksimum yang dibenarkan untuk enjin pangkalan data. Secara lalai, MySQL dan variannya mempunyai panjang kunci indeks maksimum 767 bait.

Penyelesaian:

Kaedah 1: Kemas Kini Penyedia Perkhidmatan Aplikasi

Seperti yang disyorkan dalam dokumentasi rasmi Laravel, tambahkan kod berikut pada fail app/Providers/AppServiceProvider.php:

use Illuminate\Support\Facades\Schema;

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

Ini meningkatkan panjang rentetan lalai untuk semua migrasi kepada 191 aksara, yang berada dalam had yang dibenarkan.

Kaedah 2: Dayakan Awalan Besar InnoDB

Sebagai alternatif, pengguna boleh mendayakan pilihan innodb_large_prefix untuk pangkalan data MySQL mereka. Rujuk dokumentasi pangkalan data untuk mendapatkan arahan tentang cara mendayakan pilihan ini dengan betul. Penyelesaian ini membolehkan kunci indeks yang lebih panjang, menjadikannya lebih sesuai untuk set data yang lebih besar.

Atas ialah kandungan terperinci Ralat Migrasi Laravel: Bagaimana untuk Membetulkan Isu 'Kunci Ditentukan Terlalu Panjang'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn