WEB/システム/IT技術ブログ

Laravelでmigrateコマンドを実行するとSQLエラーになる

update : 2019/03/17

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だったので、恐らくめんどくさいだろうなと思い。今回はこの方法で解決しました。

B!

Comment

Comment Form

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives