Windows環境でLaravel 5.7をインストールして、migrateコマンドを実行したのですが、以下のようなSQLエラーが発生して処理が途中で停止してしまいました。
> php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table 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`))
発生した環境は以下の通りです。
- Windows 10 Home 64bit
- PHP 7.2.14
- MariaDB 10.1.37
いろいろと調べてみたら、公式サイトで原因を見つけることができました。
Database: Migrations – Laravel – The PHP Framework For Web Artisans
「Index Lengths & MySQL / MariaDB」のところに記述されています。
まず、DBの文字セットは「utf8mb4」である必要があります。
また、MySQL 5.7.7以上、MariaDB 10.2.2以上である必要があります。
私の場合、文字セットは「utf8mb4」だったのですが、DBのバージョンが「MariaDB 10.1.37」であったのがエラーの原因のようです。
DBのバージョンが条件を満たしていない場合、「/app/Providers/AppServiceProvider.php」に「use Illuminate\Support\Facades\Schema;」と「Schema::defaultStringLength(191);」の2行を追記すれば解決するとの事です。
... use Illuminate\Support\Facades\Schema; ... public function boot() { Schema::defaultStringLength(191); } ...
作成に失敗したDB内のテーブルを全て削除して、再びmigrateを実行すると問題なくtableが作成されました。
> php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table
MariaDBをアップグレードするのがスマートな解決方法かもしれませんが、windowsでxamppだったので、恐らくめんどくさいだろうなと思い。今回はこの方法で解決しました。
コメントする