Laravelでマイグレーションのエラーが発生した場合の2つの対処法

laravel-migrate-error
  • URLをコピーしました!

久しぶりに、LaravelをインストールしてMySQLデータベースを作り、以下ようにartisanコマンドマイグレーションしようとしたら、QueryExceptionPDOExceptionエラー発生してハマってしまいましたので、その時の対処法をご紹介します。
インストールするLaravelバージョンを飛ばしたので後からわかったのですが、他のバージョンでも同じエラーが発生するらしいです。

目次

マイグレーションのエラー内容

いつものように、テーブルを追加するマイグレーションを実行してみます。

すると、以下のようなエラーが表示されます。

または、Laravel標準の認証機能を追加してみます。

を実行したところ、やはり似たようなエラーが表示されます。

管理者
管理者

何?
どっちもSyntax errorだと??

マイグレーションエラーの原因

結論から言うと、Laravel 5.4からcharasetutf8mb4に変わり、MySQLユニーク制約を付けたカラムには767bytesまでしか入らない仕様になっているからだそうです。。

2つの対処法

設定を変更する前に、1度マイグレーションに失敗すると、以下のテーブルが残っていると思いますので、以下のテーブルを綺麗に削除してください。

  • migrations
  • users

余談ですが、今後のことを考え、GUIで簡単にデータベースを操作できるよう「adminer.php」を入れることをオススメします。

あわせて読みたい
PHPでDBを参照するならphpMyAdminよりAdminerの方が軽快で便利! PHPでMySQLやPostgreSQLなどのデータベースを参照する場合、phpMyAdminやphpPgAdminを利用することが多いと思います。または、ローカルにMySQL WorkbenchやpgAdminとい...

1. AppServiceProvider.phpを変更

[app/providers/AppServiceProvider.php]ファイルを書き換え、デフォルトのバイト数を指定します。
そうすると、次回からマイグレーションファイルを作成した際にバイト数を設定しなくてもエラーが発生することはありません。

まずは、先頭の方に以下を追加します。

それから、bootメソッド内に[Schema::defaultStringLength(191);]を追加します。

これでマイグレーションを実行してもエラーは発生しなくなります!

2. create_users_table.phpを変更

もう1つはマイグレーションファイルを書き換える方法です。
[database/migrations/2014_10_12_000000_create_users_table.php]ファイルを開いて、エラーで表示されていた箇所を見てみます。

このstringメソッドの第2引数にバイト数を入力します。

他にもMySQLバージョンcharasetを変えるなどの対処法があるようなので、知りたい方は以下の参考サイトをご覧ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメント一覧 (1件)

Laravel 5.5(Cloud9)の開発環境自動構築スクリプトに3つの機能を追加! | Minory へ返信する コメントをキャンセル

CAPTCHA


目次