Laravelをローカル環境で開発した後に起こるアレ
keylengthが長すぎ問題。
厳密にはvarchar(255)
が問題。
$table->string('name');
のような、デフォルトの設定がこうなっている。
原因
- Laravel5.4から標準charasetがutf8mb4に変わった
標準charasetがutf8mb4となったことで1文字あたりの最大byte数が4bytesに増えた。
- MySQLではユニーク制約を付けたカラムには767bytesまでしか入らない。
MySQLではPRIMARY_KEYおよびUNIQUE_KEYを付けたカラムには最大767bytesまでしか入らないらしい。ver5.7.7以降だと解消されている模様。
対策
app\Providers\AppServiceProvider.php
のboot()を書き換える。
php|AppServiceProvider.php
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
これで起動できる。
マイグレーションが進んでしまっている可能性があるので、MySQL上で
drop database hogehoge;
create database hogehoge;
したほうが早い。