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

藏色散人
リリース: 2023-01-24 07:30:01
転載
2467 人が閲覧しました

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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!