LoginSignup
2
0

More than 3 years have passed since last update.

Laravel:SQLSTATE[42000]Syntax error or access violation...bytesの解決

Last updated at Posted at 2020-11-22

【概要】

1.結論

2.SQLSTATE[42000]とは何か

3.なぜこのエラーになったのか

4.どのように解決したのか

5.参考URL

6.開発環境

1.結論

app/Providers/AppServiceProviderpublic function boot()Schema::defaultStringLength(191);を記載する!

2.SQLSTATE[42000]とは何か

アクセス違反ですという意味で、SQL文の文法に誤りがあるということです。ただ、それに起因してデータがパンパンになっているためこのエラーになっています。

3.なぜこのエラーになったのか

結論から言いますとLaravelとMysqlのバージョンのせいで、Mysqlのカラムや中身の文字列がデータ量(767bytesがMAX)を超えたからでした。UTF8MB4になり1文字あたりのデータ量(4bytes)が増えたからのようです。
(大変参考になったURLを下記(参考URL)に添付しています。)

4.どのように解決したのか

app/Providers/AppServiceProvider
use Illuminate\Support\Facades\Schema; //⬅︎を追加記載(❶)
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
// 省略
    public function boot()
    {
        Schema::defaultStringLength(191); //⬅︎を追加記載(❷)
    }
}

4bytes*191文字=764bytesに抑えることで、規定量以下にしました。これをデフォルト設定にしているのでどのテーブルにもこれが適用されます。Mysqlのバージョンアップもありましたが、手軽かつアプリを使用する際に100文字を超える実装はなかったので今回はこの手段を取りました。また❶を記載しないとエラーが起きます。

5.参考URL

①Laravel5.4以上、MySQL5.7.7未満 でusersテーブルのマイグレーションを実行すると Syntax error が発生する
②【Laravel】migrateでテーブルが存在したらスキップする

6.開発環境

PHP 7.4.10
Laravel 8.9.0
MySQL 5.6.47/SequelPro 1.1.2

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0