ホームページ >バックエンド開発 >PHPチュートリアル >Laravel 移行における SQLSTATE[ エラーの解決: キーの長さの問題
Laravel を使用していて、移行中に恐ろしい SQLSTATE[42000] エラーが発生した場合、あなたは一人ではありません。このエラーは通常、データベースとして MySQL を使用する場合のキーの長さの問題が原因で発生します。このブログでは、エラーを詳しく説明し、明確な段階的な解決策を提供します。
移行を実行すると、次のようなエラーが表示される場合があります:
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
たとえば、次の移行コマンドは失敗します:
php artisan migrate
?エラーの詳細
これは、Laravel が users テーブル内の電子メールなどの列に一意のインデックスを作成しようとしたときに発生します。デフォルトの文字列長の 255 文字は、特に utf8mb4 文字セット (絵文字をサポート) を使用する場合、MySQL 構成で許可される最大キー長を超えます。
この問題を解決するには、移行ファイルでテーブルの文字セットと照合順序を指定します。その方法は次のとおりです:
ステップ 1: 移行ファイルを開く
問題の原因となっている移行ファイルを見つけます。例:
データベース/migrations/0000_00_00_000000_create_users_table.php
ステップ 2: 文字セットと照合順序を追加する
移行ファイルの up() メソッドを変更して、文字セットと照合順序のプロパティを含めます:
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'; });
⁉️ なぜこれが機能するのか
文字セットを utf8 に設定し、照合順序を utf8_unicode_ci に設定すると、1 文字あたりの最大バイト長が減り、キーの長さの問題が回避されます。このソリューションは、互換性のために特定のマルチバイト文字 (絵文字など) のサポートを犠牲にします。
他の移行でこの問題が発生しないようにするには、AppServiceProvider でデフォルトの文字列長を定義できます。
ステップ 1: AppServiceProvider を開く
app/Providers/AppServiceProvider.php.
ステップ 2: ブート方法を更新する
次のコードをブート メソッドに追加します:
use Illuminate\Support\Facades\Schema; public function boot() { Schema::defaultStringLength(191); // Shorten the default string length }
このアプローチにより、すべての移行の文字列の長さがグローバルに短縮されます。
移行中の SQLSTATE[42000] エラーは障害となる可能性がありますが、これらの修正により、問題を迅速に解決し、Laravel アプリケーションの構築を続行できます。特定の移行を調整する場合でも、グローバルなデフォルトの文字列長を設定する場合でも、この問題を効果的に処理するツールが手に入ります。
Laravel 開発中に同様のエラーに直面したことがありますか?それらをどのように解決しましたか?以下のコメント欄であなたの経験を共有してください!
コーディングを楽しんでください! ?
以上がLaravel 移行における SQLSTATE[ エラーの解決: キーの長さの問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。