web-dev-qa-db-ja.com

ONLY_FULL_GROUP_BYを無効にする

誤ってONLY_FULL_GROUP_BYモードを次のように有効にしました。

SET sql_mode = 'ONLY_FULL_GROUP_BY';

無効にする方法

418
ZviBar

解決策1: mysqlコンソールから ONLY_FULL_GROUP_BY を削除

mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

もっと読むことができます ここ

解決方法2: phpmyadminから ONLY_FULL_GROUP_BY を削除

  • Phpmyadminを開き、localhostを選択します 
  • メニュー変数をクリックして、SQLモードにスクロールしてください。
  • 編集ボタンをクリックして値を変更し、 ONLY_FULL_GROUP_BY &保存をクリックします。 enter image description here
820
Eyo Okon Eyo

更新:

enter image description here

現在のmysql設定を保持してONLY_FULL_GROUP_BYを無効にするには、phpmyadminまたはあなたが使用しているクライアントにアクセスして次のように入力することを推奨します。

SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','') copy_me

次の結果をあなたのmy.iniファイルにコピーします。

ミント Sudo nano /etc/mysql/my.cnf

ubuntu 16以上 Sudo nano /etc/mysql/my.cnf

ubuntu 14-16 /etc/mysql/mysql.conf.d/mysqld.cnf

あぶない! copy_meの結果には、デフォルトで切り捨てられる可能性がある長いテキストを含めることができます。テキスト全体をコピーしてください。


古い答え:

永続的に無効にしたい場合 error "SELECTリストの式#NはGROUP BY句に含まれず、GROUP BYの列に機能的に依存しない非集計列 'db.table.COL'を含みますこれはsql_mode = only_full_group_byと互換性がありません "

  1. Sudo nano /etc/mysql/my.cnf
  2. これをファイルの末尾に追加します

    [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"
    
  3. MySQLを再起動するためのSudo service mysql restart

これにより、 _ all _ usersのONLY_FULL_GROUP_BYが無効になります

314
breq

使用には注意してください 

SET sql_mode = '' 

これは実際に現在有効になっているすべてのモードをクリアします。 あなたが他の設定を台無しにしたくない場合は、あなたがしたいことでしょう 

SELECT @@sql_mode 

最初に、有効にされたモードのコンマ区切りのリストを取得するために、そしてそれをONLY_FULL_GROUP_BYオプションなしでこのリストに設定します。

177
Taran

これを試してみてください。

SET sql_mode = ''

コミュニティノート:以下の回答で指摘されているように、これは実際に現在有効になっているSQLモードを all からクリアします。それは必ずしもあなたが望むものではないかもしれません。

93
Tripp Kinetics
    mysql> 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';
    mysql> set session 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> exit;
91
WeiYuan

既存のモードを削除せずにsql_modeにモードを1つだけ追加する:

SET sql_mode=(SELECT CONCAT(@@sql_mode,',<mode_to_add>'));

他の人を削除せずにsql_modeから特定のモードだけを削除する:

SET sql_mode=(SELECT REPLACE(@@sql_mode,'<mode_to_remove>',''));

ONLY_FULL_GROUP_BYモードのみを削除したい場合は、以下のコマンドを使用してください。

SET sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));

参照: http://johnemb.blogspot.com/2014/09/adding-or-removing-individual-sql-modes.html

56

@cwhispererに感謝します。 SymfonyアプリでDoctrineにも同じ問題がありました。私はちょうど私のconfig.ymlにオプションを追加しました:

doctrine:
    dbal:
        driver:   pdo_mysql
        options:
            # PDO::MYSQL_ATTR_INIT_COMMAND
            1002: "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"

これは私にとってはうまくいきました。

38
Arvid

MySQLサーバーが再起動されない限り、@ Eyo Okon Eyoソリューションが機能し、デフォルト設定が復元されることに気付きました。ここに私のために働いた永続的な解決策があります:

特定のSQLモード(この場合ONLY_FULL_GROUP_BY)を削除するには、現在のSQLモードを見つけます。

SELECT @@GLOBAL.sql_mode;

結果をコピーして、不要なものを削除します(ONLY_FULL_GROUP_BY

例えば。:

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

STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

このファイルを作成して開きます:

/etc/mysql/conf.d/disable_strict_mode.cnf

新しいSQLモードを書き込み、過去に追加します。

[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

mySQLを再起動します。

Sudo service mysql restart

または、ANY_VALUE()を使用してONLY_FULL_GROUP_BY値の拒否を抑制することができます。 詳細についてはこちら

28
Waqleh

に:

  • Ubuntu 14.04
  • mysql Ver 14.14 Distrib 5.7.16、Linux(x86_64)用、EditLineラッパー

行う:

$ Sudo nano /etc/mysql/conf.d/mysql.cnf

コピーアンドペースト:

[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

ファイルの一番下へ

$ Sudo service mysql restart
26
Jadeye

MySQLのドキュメント は以下のメソッドも指定しています。

  • My.cnf(Unixオペレーティングシステム)またはmy.ini(Windows)などのオプションファイルでsql-mode="<modes>"を設定します。
  • コマンドラインからサーバー起動時にSQLモードを設定するには、--sql-mode="<modes>"オプションを使用します。

* <modes>はコンマで区切られたさまざまなモードのリストです。

SQLモードを明示的にクリアするには、コマンドラインで--sql-mode=""を使用するか、オプションファイルでsql-mode=""を使用して、空の文字列に設定します。

私はsql-mode=""/etc/my.cnfオプションを追加しました、そしてそれは働きました。

このSO解決策 MySQLでどのmy.cnfファイルが使用されているかを調べる方法について説明します。

変更を加えたら、必ずMySQLを再起動してください。

22
br3nt

WAMPを使用している場合は、 WAMPアイコンを左クリックし、[MySQL] - > [MySQL settings] - > [sql-mode] の順に選択し、[sql-mode] - > [user mode]を選択します

Checkout this image

18
Shiran Gabriel

MySQL 5.7およびUbuntu 16.04では、ファイルmysql.cnfを編集します。

$ Sudo nano /etc/mysql/conf.d/mysql.cnf

次のようにsql_modeを含めてファイルを保存します。

[mysql]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

私の場合は、STRICT_TRANS_TABLESモードとONLY_FULL_GROUP_BYモードを削除しました。

こうすると、モード設定が永久に保存されます。 MySQLを介して@@ sql_modeを更新するだけでは違います。これはマシン/サービスの再起動時にリセットされるためです。

その後、変更した設定に対処し、mysqlサービスを再起動します。

$ Sudo service mysql restart

Mysqlにアクセスしてみます。

$ mysql -u user_name -p

MySQLコンソールにログインしてアクセスできれば、問題ありません。すばらしいです!

BUT、私と同じように、あなたはsql_modemysqldのオプションであることを示すエラー"unknown variable sql_mode" _、戻って、ファイルmysql.cnfを再度編集して、[mysql][mysqld]に変更する必要があります。 MySQLサービスを再起動し、最後にMySQLコンソールにログインしようとします。ここにあります!

10

私のSQL(Mac OS X上で実行されているバージョン5.7.11)では、これは私のためにmysqlシェルクライアント上で動作します:

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"

MySQL 5.6ドキュメントによると、sql_modeはデフォルトです。

mySQL 5.6.5以降の空白文字列 NO_ENGINE_SUBSTITUTION、5.6.6のSTRICT_TRANS_TABLES

mysql 5.6リファレンス

9

MySQL 8.0.11を使用している場合は、sql-modeから「NO_AUTO_CREATE_USER」を削除する必要があります。

ファイル/etc/mysql/my.cnfおよび[mysqld]ヘッダーに次の行を追加します。

[mysqld]

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
5
Hiren Bhut

私はdoctrineを使っています、そして私は私のdoctrine.local.phpにdriverOptionsを追加しました:

return array(
'doctrine' => array(
    'connection' => array(
        'orm_default' => array(
            'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
            'params' => array(
                'Host' => 'localhost',
                'port' => '3306',
                'user' => 'myusr',
                'password' => 'mypwd',
                'dbname' => 'mydb',
                'driverOptions' => array(
                    PDO::MYSQL_ATTR_INIT_COMMAND => "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"
                ),
            ),
        ),
    ),
));

Phpmyadminでは、ユーザーは特権でSUPERを有効にする必要があります。

5
cwhisperer

これは、Ubuntu 14以降のMySql 5.7以降に対する恒久的な解決策です。

$ Sudo bash -c "echo -e \"\nsql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\"  >> /etc/mysql/mysql.conf.d/mysqld.cnf"
$ Sudo service mysql restart
# Check if login attempt throws any errors
$ mysql -u[user] -p # replace [user] with your own user name

あなたがエラーなしでログインすることができるならば - あなたは今すべて設定されるべきです。

2
demisx

cPanel/WHMでVPS/Serverを実行しているユーザーに対して、次の操作を行ってONLY_FULL_GROUP_BYを永続的に無効にできます。

ルートアクセスが必要(VPSまたは専用サーバーのいずれか)

  1. ルートとしてWHMを入力し、phpMyAdminを実行します

  2. [変数]をクリックし、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
  1. SFTP-SSH(ルート)経由でサーバーに接続し、ファイル/etc/my.cnfをダウンロードします

  2. ローカルPCのテキストエディターmy.cnfファイルで開き、ステップ(2)でコピーした行全体([mysqld]セクションの下)に貼り付けますが、ONLY_FULL_GROUP_BY,を削除します

例えばこれを貼り付けます:

# disabling ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  1. my.cnfファイルを保存し、/etc/にアップロードし直します

  2. WHMを入力し、「WHM> Restart Services> SQL Server(MySQL)」に進み、サービスを再起動します

2
Marco Demaio

Mac OSの場合Mojave(10.14)Open terminal

$ Sudo mkdir /usr/local/mysql-5.7.24-macos10.14-x86_64/etc
$ cd /usr/local/mysql-5.7.24-macos10.14-x86_64/etc
$ Sudo nano my.cnf

以下を貼り付けてください。

[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Nanoを保存して終了するためのショートカット:Ctrl+xyEnter

注: これらのコマンドでmysql-5.7.24-macos10.14-x86_64を更新する必要があるかもしれません、ちょうどあなたが/usr/local/内で得た正しいフォルダ名をチェックする

誰かに役立つことを願っています!

2
AamirR

これは私がMysqlワークベンチを修正するために実行したものです。

下記のコマンドで現在の値を取得する前に

SELECT @@sql_mode 

後でリストからONLY_FULL_GROUP_BYキーを削除し、以下のコマンドを貼り付けました

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'
2
Matt Vegas

Mysqlで作業し、rootユーザーで登録されたIm、私にとって有効な解決策は以下のとおりです。

mysql> SET SESSION sql_mode =(SELECT REPLACE(@@ sql_mode、 'ONLY_FULL_GROUP_BY'、 ''));

0

設定ファイルmy.cnfを使って無効にすることができます。

$ mysql --verbose --help | grep my.cnf

そのため、macOS 10.12ではusr/local/etc/my.cnfにあります。ここでsql_modeを編集できます。 

# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
0
Dio Phung