ホームページ  >  記事  >  データベース  >  MySQL設定only_full_group_byのエラー報告問題を詳しく解説した記事

MySQL設定only_full_group_byのエラー報告問題を詳しく解説した記事

藏色散人
藏色散人転載
2023-01-24 07:30:012496ブラウズ

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 を使用するとエラーが報告されます。による###。 テスト環境は、

mysql5.7.x

の最新バージョンをダウンロードしてインストールしました。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 を削除し、値をリセットします。

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'``;
3. 上記により、新しく作成されたデータベースに有効なグローバル sql_mode が変更されます。

既存のデータベースの場合は、対応するデータの下で実行する必要があります

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 Configuration

select @@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 サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。