LaravelでgroupBy追加後、SQLSTATE[42000]: Syntax error or access violation: 1055 Expressionエラーが発生。対処法をまとめておきます。
目次
実行環境
- CentOS:7.5
- mysql:5.7.23
- Laravel:5.7.6
Syntax error or access violation: 1055 Expression発生
LaravelクエリビルダでGROUP_BY追加後、以下のエラーが発生。
1 2 3 | SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #8 of SELECT list is not in GROUP BY clause and contains nonaggregated column … |
こちらの記事を参考にして、my.cnfに以下の設定を追加。
/etc/my.cnf
1 2 | [mysqld] sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
MySQLを再起動。
1 | $ service mysqld restart |
うーん…。エラー変わらず。
Syntax error or access violation: 1055 Expressionを解消する方法
というわけでこちらを参考にdatabase.phpを修正。
Group by not working - Laravel - Stack Overflow
I'm not able to run this simple que…
stackoverflow.com
/config/database.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'hoge'), 'port' => env('DB_PORT', 'hoge'), 'database' => env('DB_DATABASE',hoge), 'username' => env('DB_USERNAME', hoge), 'password' => env('DB_PASSWORD', hoge), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ], |
以下の’strict’をtrueからfalseに修正します。
1 | 'strict' => false, |
すると無事にエラーが解消されました。
ただstrictモードを無効にすることはあまり良くないよう。バージョン5.7以降のMySQLサーバを使用していることが原因みたいです。
このバージョンからは、GROUP BYSQL99に準拠するように動作するため、やはりMySQLサーバの設定を変更することが推奨されているみたい。