おじさんがHeidiSQLを過信しすぎてgroup byにハマった結果…
はい皆さんこんにちは
結論から言うとこの記事は
・MYSQLで厳密モードを使っている(ONLY_FULL_GROUP_BY)
・どうもHeidiSQLからの接続で厳密モードがONになっていない
・HeidiSQLから再設定した
という話です。
この話の環境は以下の通りです。
- HeidiSQL 10.2.0.5599
- AWS EC2(Ruby on Rails)
- AWS RDS (MySQL 8.0.16)
MYSQLに繋ぐにはEC2経由でSShトンネルを使っています。
詳細。
SELECT @@global.sql_mode;
"@@global.sql_mode"
"ONLY_FULL_GROUP_BY,NO_ENGINE_SUBSTITUTION"
MYSQLにはONLY_FULL_GROUP_BYが設定されてます。
例えばこのようなテーブルで
SELECT A FROM mysql.test
GROUP BY C;
この時GROUP BYしていないAは取り出せないと怒られます。(5.7系からデフォでこうなっているらしい)
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mysql.test.A'
which is not functionally dependent on columns in GROUP BY clause; this is incompatible
with sql_mode=only_full_group_by
HeidiSQLを利用すると何故か結果が抽出できてしまう
そうはならんやろ・・・ なっとるやろがい
そこでHeidiSQLでsql_modeを変更してみたらうまくいった
正直おまかんな気がするんですが同じような症状の人はこれ打ってみてください。
今の設定を見る
SELECT @@global.sql_mode;
sql_modeを変更する
SET SESSION sql_mode=ONLY_FULL_GROUP_BY;
ありがとうございました。