誤ってONLY_FULL_GROUP_BYモードを次のように有効にしました。
SET sql_mode = 'ONLY_FULL_GROUP_BY';
無効にする方法
解決策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 を削除
現在の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と互換性がありません "
Sudo nano /etc/mysql/my.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"
MySQLを再起動するためのSudo service mysql restart
これにより、 _ all _ usersのONLY_FULL_GROUP_BY
が無効になります
使用には注意してください
SET sql_mode = ''
これは実際に現在有効になっているすべてのモードをクリアします。 あなたが他の設定を台無しにしたくない場合は、あなたがしたいことでしょう
SELECT @@sql_mode
最初に、有効にされたモードのコンマ区切りのリストを取得するために、そしてそれをONLY_FULL_GROUP_BY
オプションなしでこのリストに設定します。
これを試してみてください。
SET sql_mode = ''
コミュニティノート:以下の回答で指摘されているように、これは実際に現在有効になっているSQLモードを all からクリアします。それは必ずしもあなたが望むものではないかもしれません。
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;
既存のモードを削除せずに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
@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',''))"
これは私にとってはうまくいきました。
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値の拒否を抑制することができます。 詳細についてはこちら
に:
行う:
$ 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
MySQLのドキュメント は以下のメソッドも指定しています。
sql-mode="<modes>"
を設定します。--sql-mode="<modes>"
オプションを使用します。* <modes>
はコンマで区切られたさまざまなモードのリストです。
SQLモードを明示的にクリアするには、コマンドラインで--sql-mode=""
を使用するか、オプションファイルでsql-mode=""
を使用して、空の文字列に設定します。
私はsql-mode=""
に/etc/my.cnf
オプションを追加しました、そしてそれは働きました。
このSO解決策 MySQLでどのmy.cnfファイルが使用されているかを調べる方法について説明します。
変更を加えたら、必ずMySQLを再起動してください。
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_modeがmysqldのオプションであることを示すエラー"unknown variable sql_mode" _、戻って、ファイルmysql.cnfを再度編集して、[mysql]
を[mysqld]
に変更する必要があります。 MySQLサービスを再起動し、最後にMySQLコンソールにログインしようとします。ここにあります!
私の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 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
私は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を有効にする必要があります。
これは、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
あなたがエラーなしでログインすることができるならば - あなたは今すべて設定されるべきです。
cPanel/WHMでVPS/Serverを実行しているユーザーに対して、次の操作を行ってONLY_FULL_GROUP_BYを永続的に無効にできます。
ルートアクセスが必要(VPSまたは専用サーバーのいずれか)
ルートとしてWHMを入力し、phpMyAdminを実行します
[変数]をクリックし、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
SFTP-SSH(ルート)経由でサーバーに接続し、ファイル/etc/my.cnf
をダウンロードします
ローカル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
my.cnf
ファイルを保存し、/etc/
にアップロードし直します
WHMを入力し、「WHM> Restart Services> SQL Server(MySQL)」に進み、サービスを再起動します
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+x
とy
とEnter
注: これらのコマンドでmysql-5.7.24-macos10.14-x86_64
を更新する必要があるかもしれません、ちょうどあなたが/usr/local/
内で得た正しいフォルダ名をチェックする
誰かに役立つことを願っています!
これは私が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'
Mysqlで作業し、rootユーザーで登録されたIm、私にとって有効な解決策は以下のとおりです。
mysql> SET SESSION sql_mode =(SELECT REPLACE(@@ sql_mode、 'ONLY_FULL_GROUP_BY'、 ''));
設定ファイル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"