広告 忘備録

MySQLのonly_full_group_byエラーに対応する

最近のMySQLだと発生するエラー。

An uncaught Exception was encountered
Type: mysqli_sql_exception

Message: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db.table.column' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

公式リファレンスによると、

GROUP BY 句で名前が指定されていない非集約カラムを、選択リスト、HAVING 条件、または (MySQL 5.6.5 以降で) ORDER リストが参照するクエリーを拒否します。

ONLY_FULL_GROUP_BY が有効な場合、次のクエリーは無効です。1 番目は、選択リスト内の非集約の address カラムが GROUP BY 句で名前を指定されておらず、2 番目は、HAVING 句の max_age が GROUP BY 句で名前を指定されていないため、ともに無効になります。

要はONLY_FULL_GROUP_BYが有効なため、group byの条件が厳しくなってるみたい。

これを設定で無効にしてしまう。

現在の設定確認

下記のクエリをMySQLで実行すれば、現在の設定が確認できる。

SELECT @@global.sql_mode;

結果にONLY_FULL_GROUP_BYが含まれていたら、制約が有効になってしまっている。

MySQLで直接実行する

このクエリを使えば、ONLY_FULL_GROUP_BYは無効になり、そして再起動しても設定はずっと有効になる。
my.cnfの場所を探さなくてもいいので楽。

SET PERSIST sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

参考URL: https://stackoverflow.com/questions/23921117/disable-only-full-group-by

  • この記事を書いた人

たろう

タイ在住のアフィリエイター
最新総フォロワー数:
𝕏:
総収益 5,303円 $296.26

現在アダアフィ挑戦中|英語・タイ語ガチ勢|現地民とお酒を飲むために語学勉強

-忘備録