Mysql5.7 以降での ONLY_FULL_GROUP_BY エラーの解決方法

Mysql5.7 以降での ONLY_FULL_GROUP_BY エラーの解決方法

最近、開発プロセス中に、プロジェクト開発環境に接続されている MySQL データベースは Alibaba Cloud のデータベースであり、Alibaba Cloud データベースのバージョンは 5.6 です。テスト環境のmysqlは自分でインストールした5.7です。そのため、開発プロセス中に、何人かの友人が誤って group by に関連する SQL ステートメントを記述してしまいました。開発環境では正常に動作しますが、テスト環境では異常が見つかります。

原因分析: MySQL 5.7 バージョンでは、デフォルトで mysql sql_mode = only_full_group_by 属性が設定され、エラーが発生します。

その中でも、ONLY_FULL_GROUP_BY がこのエラーの原因です。group by 集計操作の場合、select 内の列が group by に表示されない場合は、列が group by 句に含まれていないため、SQL は無効になります。したがって、sql_mode=only_full_group_by が設定されているデータベースでは、group by を使用するとエラーが報告されます。

テスト環境では、最新バージョンの MySQL 5.7.x をダウンロードしてインストールしました。only_full_group_by モードはデフォルトで有効になっています。ただし、このモードを有効にすると、元の group by ステートメントでエラーが報告され、削除されました。

only_full_group_by をオンにすると、group by は、影響を受けるフィールド情報しか取得できず、影響を受けない他のフィールドとは共存できない、distinct と同じになるように感じます。このように、group by の機能は非常に狭くなります。

only_full_group_by モードを有効にすることをお勧めします。 MySQL には、any_value(field) という関数があるため、グループ化されていないフィールドを表示できます (only_full_group_by モードをオフにするのと同じ効果があります)。

1. sql_modeを確認する

SELECT @@sql_mode;

照会された値は次のとおりです。

ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION

2. ONLY_FULL_GROUP_BY を削除し、値をリセットします。

@@global.sql_mode を 'STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION' に設定します。

3. 上記により、新しく作成されたデータベースに有効なグローバル sql_mode が変更されます。既存のデータベースの場合は、対応するデータの下で実行する必要があります。

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データベースを再起動しても無効であり、次の方法は再起動後も有効です。

Linux システム上の MySQL 構成ファイル /etc/my.cnf ファイルを見つけて、sql_mode フィールドを照会します。構成ファイル内にこのキーワードが見つからなかったので、手動で追加しました。

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 の再起動後に有効になるように、[mysqld] 構成に追加する必要があることです。データベースを終了します: exit, restart コマンド:

サービスmysqldを再起動

ページを更新すると、エラー メッセージは消えます。問題は正常に解決されました。データベースに再度接続して、sql_mode 構成を表示します。@@sql_mode を選択します。

STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION

これで、Mysql5.7 以降での ONLY_FULL_GROUP_BY エラーの解決方法に関するこの記事は終了です。Mysql5.7 ONLY_FULL_GROUP_BY に関するその他の関連コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL 8.0.24 バージョンのインストールと設定方法のグラフィックチュートリアル
  • MySQL 8.0.24 リリースノートのいくつかの改善点
  • MySQLのMVCCマルチバージョン同時実行制御の実装
  • MySQL 8.0.23のルートパスワードをリセットするための最適なソリューション
  • MySql8.0バージョンに接続するMyBatisの設定問題について
  • SeataがMySQL 8バージョンを使用できない問題を解決する方法
  • DBeaver を MySQL バージョン 8 以降に接続し、起こりうる問題を解決する方法の詳細な説明
  • IDEA で mysql8.0.3 と mybatis-generator を使用する際に発生するバグ
  • MySQL 5.x の文字化け問題の解決方法
  • CentOS 7 に MySQL 8.0.20 データベースをインストールするための詳細なチュートリアル
  • mysql8.0.19 winx64バージョンのインストール問題を解決する
  • Django 2.2 と PyMySQL バージョンの互換性の問題
  • MySQL 5.7 をバイナリモードでインストールし、Linux でシステムを最適化する手順
  • MySQL 8.0.18 のさまざまなバージョンのインストールとインストール中に発生した問題 (要点の要約)
  • MySQLのバージョンアップ方法を超詳しく解説

<<:  Nginx インストール エラーの解決方法

>>:  Element+vueを使用して開始時間と終了時間の制限を実装する

推薦する

CSSの4種類の配置の違いの詳細な説明

フロントエンド開発でよく使われるCSSの配置方法は、位置決めには、通常位置決め、相対位置決め、絶対位...

Nginx 仮想ホストの詳細な分析

目次1. 仮想ホスト1.1 仮想ホストの概念1.2 仮想ホストタイプ2. IP仮想ホストに基づく2....

JavaScript継承のさまざまな方法とメリット・デメリットを詳しく解説

目次1. プロトタイプチェーン継承2. コンストラクタの借用(古典的な継承) 3. 組み合わせ継承4...

mysql 基本操作文コマンドの詳細な説明

1. MySQLに接続するフォーマット: mysql -h ホストアドレス -u ユーザー名 -p ...

CSSはフロントエンドの画像変形の問題を完璧に解決します

Toutiao IT School で、CSS がフロントエンドの画像変形の問題を完璧に解決するとい...

ブラウザ内でHTMLタグを中央に配置するCSSスタイル

CSS スタイル:コードをコピーコードは次のとおりです。 <スタイル タイプ="te...

TS 数値区切り文字とより厳密なクラス属性チェックの詳細な説明

目次概要演算子の改良と正確なinstanceofよりスマートなオブジェクトリテラル推論固有のシンボル...

mysql 5.7.5 m15 winx64.zip インストール チュートリアル

win7 64 ビットで mysql-5.7.5-m15-winx64 をインストールして構成する方...

MySQL マスタースレーブレプリケーションと読み取り書き込み分離の詳細な説明

記事マインドマップマスター/スレーブ レプリケーションと読み取り/書き込み分離を使用する理由は何です...

MySQL 集計関数のソート

目次MySQL 結果のソート - 集計関数環境クエリ結果の並べ替えクエリのグループ化と集約生徒の平均...

ドメイン名を nginx サービスにバインドする方法

nginx.conf で複数のサーバーを設定します。 http リクエストを処理する際、nginx ...

js の parseInt() の奇妙な動作の調査と修正

背景: parseInt(0.006) または parseInt(0.0006) は 0 という値を...

404エラーページを作成する際に注意すべき問題の簡単な分析

ウェブサイトを最適化するときは、エラー ページの使い方を学ぶ必要があります。たとえば、ウェブサイトに...

CSS を使用してプログレスバーと順序プログレスバーを実装する例

この半月、期末試験の準備にかなりのエネルギーを費やしました。今日はしっかり復習するべきだったのですが...

IIS 7.5では、HTMLはSHTMLのようなinclude関数(モジュールマッピングの追加)をサポートします。

最初はたくさんのエラーを見つけましたが、実際には非常に簡単です。shtm の元の設定を参照するだけで...