SQLエラー(1055)のsql_mode = ONLY_FULL_GROUP_BY

エラー

ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'aaa.test.age' which is not functionally dependent on columns in GROUP BY clause; 
this is incompatible with sql_mode=only_full_group_by

 

mysql5.1、異常は報告されません。

mysql5.5、異常は報告されません。

mysql5.6、異常は報告されません。

mysql5.7、異常報告

理由

その理由は、使用することによりmysqlグループのための規定です。厳密に言えば、それはして、グループの後に使用することです。フィールド、または重合機能を追加する必要性によってのみグループフィールドを選択します。オラクルでは、これが合意されています。だから、エラーを指示します。しかし、MySQLのバージョン5.7後までだけ、これは明確な制限を必要とします。

この問題は2つのアイデア:

最初の修正SQLは、規定の規範に従い、問題のすべてのプロジェクトを書き換えるSQL。明らかにコストがかかりすぎます。厳密に書き込みの時間を調節することができるが、まだ開発されていない。賭け金は高いです。

5.7を実行する前にそれがあったとして機能するように連続するように、この制限を削除するために第二。最初のコストがあまりので、このプロジェクトは、完成されています。

ソリューション

1、上記のすべての文言は、標準のSQL文ではありませんした後、SQL文を書き換えます

図2は、MySQLサーバを着陸、次のコマンドを実行し、グローバルおよびセッションレベルでのすべての変更

MySQLの>セットグローバル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の>セットセッションの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に示すように、第二の方法、my.cnfファイル、指定された値のsql_modeのに連動して:

[mysqldを】
sql_modeの= STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION

注:サーバーと一緒に2と3を再起動することができない、と構成がまだ有効であっても、再起動です。

おすすめ

転載: www.cnblogs.com/aeolian/p/12401916.html