最近、開発プロセス中に、プロジェクト開発環境に接続されている 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; 照会された値は次のとおりです。
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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: Element+vueを使用して開始時間と終了時間の制限を実装する
目次序文主な実装コードHTMLコードJSコード序文南の友達の多くは、雪をほとんど見たことがない、ある...
1 ダウンロードして準備するまず、公式ウェブサイトからTomcatをダウンロードする必要があります。...
この記事では、IP入力ボックスを実装するための react+antd.3x の具体的なコードを参考ま...
目次1. プロキシとは何ですか? 2. 使い方は? 1. プロキシを使用する簡単な例2. 対象オブジ...
目次序文背景実施計画の考え方js ストレージ機能ソリューション設計やっと要約する序文どの SaaS ...
もしかしたら私の考え方が間違っていたのかもしれないし、問題の説明が少し乱雑だったのかもしれないが、こ...
1 Dockerサービスを開始するまず、docker サービスを開始する方法を知っておく必要がありま...
個人的には、WeChat アプレットの開発フレームワークは VUE と概ね似ていると感じていますが、...
目次1. Dockerを使用する利点2. Dockerをインストールする1) LinuxにDocke...
目次1 テストケース2 JS配列重複排除4種類2.1 要素の比較2.1.1 二重層 for ループ比...
MySQLの左結合が無効であり、その使用方法今日SQLを書いていたとき、左結合を使用すると左のテーブ...
目次序文プロトタイプチェーン継承コンストラクタの継承組み合わせ継承(プロトタイプチェーン継承とコンス...
Nginx 仮想ドメイン名設定を使用すると、ドメイン名を購入せずに特定のドメイン名を介してローカル ...
CentOS 6.4 環境で MySQL 5.1 を 5.5.36 にアップグレードする手順を記録し...
目次1. ファイルをインポートする2. HTMLページ3. メインコード4. 画像をbase64に変...