LoginSignup
3
0

More than 3 years have passed since last update.

HeidiSQLを使っていたらONLY_FULL_GROUP_BYがどっか行った

Last updated at Posted at 2019-12-03

おじさんが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トンネルを使っています。

詳細。

image.png

SELECT @@global.sql_mode;
"@@global.sql_mode"
"ONLY_FULL_GROUP_BY,NO_ENGINE_SUBSTITUTION"

MYSQLにはONLY_FULL_GROUP_BYが設定されてます。

image.png

例えばこのようなテーブルで

image.png

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を利用すると何故か結果が抽出できてしまう
そうはならんやろ・・・ なっとるやろがい
image.png
そこでHeidiSQLでsql_modeを変更してみたらうまくいった

image.png
↓↓
image.png
↓↓
image.png

正直おまかんな気がするんですが同じような症状の人はこれ打ってみてください。

今の設定を見る
SELECT @@global.sql_mode;

sql_modeを変更する
SET SESSION sql_mode=ONLY_FULL_GROUP_BY;

ありがとうございました。

3
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
3
0