MySQL設定only_full_group_byのエラー報告問題を詳しく解説した記事
開発環境は mysql5.6
に接続されており、テスト環境は mysql5.7
です。開発中に、友人が group by
に関する sql
ステートメントを書きました。開発環境では正常に動作しますが、テスト環境では例外が発生します。
原因分析: MySQL5.7
バージョンには、デフォルトで mysql sql_mode =only_full_group_by
属性が設定されているため、エラーが発生します。
ONLY_FULL_GROUP_BY
がこのエラーの原因です。この厳密モードでは、group by
集計操作の場合、select## の場合、列が
#group by に現れない場合、この
SQL は不正です。開発者が作成した
sql では、
select 列が
group by 句に含まれていないため、
group を使用するとエラーが報告されます。による###。 テスト環境は、
の最新バージョンをダウンロードしてインストールしました。only_full_group_by
モードはデフォルトで有効になっています。
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 を削除し、値をリセットします。
SET` `@@``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'``;
既存のデータベースの場合は、対応するデータの下で実行する必要があります
SET` `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
システムの/etc/my.cnf ファイルで
MySQL の構成ファイルを見つけます。 、クエリ
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
注意すべき点は、このキーワードを
に追加する必要があることです。 [mysqld] 構成、次のように追加後、mysql を再起動して有効にします。データベースを終了します: exit、再起動コマンド:
service mysqld restart #lnmp重启mysql lnmp restart mysql
ページとエラー メッセージを更新します消えます。正常に解決されました。データベースに再度接続して、
sql_mode Configurationselect @@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## は次のとおりです。 sql_mode の共通値の意味については、次を参照してください。
ONLY_FULL_GROUP_BY: GROUP BY 集計操作の場合、 SELECT の列が GROUP BY に現れない場合、列が GROUP BY 句にないため、この SQL は無効です。NO_AUTO_VALUE_ON_ZERO: この値は、自動拡張列の挿入に影響します。デフォルト設定では、0 または NULL を挿入すると、次の自動増加値が生成されます。このオプションは、ユーザーが値 0 を挿入する必要があり、列が自動増加する場合に便利です。
STRICT_TRANS_TABLES: このモードでは、トランザクション テーブルに値を挿入できない場合、現在の操作は中断され、非トランザクション テーブルには制限がありません。厳密モードでは、ゼロの日付と月は許可されません
NO_ZERO_DATE: この値を設定すると、mysql データベースではゼロの日付の挿入が許可されず、ゼロの日付を挿入すると警告ではなくエラーがスローされます。
ERROR_FOR_DIVISION_BY_ZERO: INSERT または UPDATE プロセス中に、データがゼロで除算されると、警告ではなくエラーが生成されます。モードが指定されていない場合、データがゼロで除算されると MySQL は NULL を返します。
NO_AUTO_CREATE_USER: GRANT による空のパスワードを持つユーザーの作成を無効にします
NO_ENGINE_SUBSTITUTION: 必要なストレージ エンジンが無効かどうかコンパイルすると、エラーがスローされます。この値が設定されていない場合、デフォルトのストレージ エンジンが代わりに使用され、例外がスローされます。
PIPES_AS_CONCAT: "||" を OR 演算子ではなく文字列接続演算子として扱います。 Oracle データベース 同様に、文字列連結関数 Concat
ANSI_QUOTES: ANSI_QUOTES を有効にした後は、文字列が識別子として解釈されるため、二重引用符を使用して文字列を引用することはできません。
推奨学習: 「
MySQL ビデオ チュートリアル」
以上がMySQL設定only_full_group_byのエラー報告問題を詳しく解説した記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

ビッグ データ構造の処理スキル: チャンキング: データ セットを分割してチャンクに処理し、メモリ消費を削減します。ジェネレーター: データ セット全体をロードせずにデータ項目を 1 つずつ生成します。無制限のデータ セットに適しています。ストリーミング: ファイルやクエリ結果を 1 行ずつ読み取ります。大きなファイルやリモート データに適しています。外部ストレージ: 非常に大規模なデータ セットの場合は、データをデータベースまたは NoSQL に保存します。

PHP で MySQL データベースをバックアップおよび復元するには、次の手順を実行します。 データベースをバックアップします。 mysqldump コマンドを使用して、データベースを SQL ファイルにダンプします。データベースの復元: mysql コマンドを使用して、SQL ファイルからデータベースを復元します。

MySQL クエリのパフォーマンスは、検索時間を線形の複雑さから対数の複雑さまで短縮するインデックスを構築することで最適化できます。 PreparedStatement を使用して SQL インジェクションを防止し、クエリのパフォーマンスを向上させます。クエリ結果を制限し、サーバーによって処理されるデータ量を削減します。適切な結合タイプの使用、インデックスの作成、サブクエリの使用の検討など、結合クエリを最適化します。クエリを分析してボトルネックを特定し、キャッシュを使用してデータベースの負荷を軽減し、オーバーヘッドを最小限に抑えます。

MySQLテーブルにデータを挿入するにはどうすればよいですか?データベースに接続する: mysqli を使用してデータベースへの接続を確立します。 SQL クエリを準備します。挿入する列と値を指定する INSERT ステートメントを作成します。クエリの実行: query() メソッドを使用して挿入クエリを実行します。成功すると、確認メッセージが出力されます。

PHP で MySQL ストアド プロシージャを使用するには: PDO または MySQLi 拡張機能を使用して、MySQL データベースに接続します。ストアド プロシージャを呼び出すステートメントを準備します。ストアド プロシージャを実行します。結果セットを処理します (ストアド プロシージャが結果を返す場合)。データベース接続を閉じます。

PHP を使用して MySQL テーブルを作成するには、次の手順が必要です。 データベースに接続します。データベースが存在しない場合は作成します。データベースを選択します。テーブルを作成します。クエリを実行します。接続を閉じます。

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

Oracle データベースと MySQL はどちらもリレーショナル モデルに基づいたデータベースですが、Oracle は互換性、スケーラビリティ、データ型、セキュリティの点で優れており、MySQL は速度と柔軟性に重点を置いており、小規模から中規模のデータ セットに適しています。 ① Oracle は幅広いデータ型を提供し、② 高度なセキュリティ機能を提供し、③ エンタープライズレベルのアプリケーションに適しています。① MySQL は NoSQL データ型をサポートし、② セキュリティ対策が少なく、③ 小規模から中規模のアプリケーションに適しています。
