18 ответов:
Решение 1: Удалить ONLY_FULL_GROUP_BY из консоли mysql
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));вы можете подробнее здесь
решение 2: удалить ONLY_FULL_GROUP_BY от phpmyadmin
обновление:
чтобы сохранить текущие настройки mysql и отключить
ONLY_FULL_GROUP_BYЯ предлагаю посетить ваш phpmyadmin или любой клиент, который вы используете и введите:
SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','') copy_meследующая копия результата на ваш .
монетный:
sudo nano /etc/mysql/my.cnfubuntu 16 и выше:
sudo nano /etc/mysql/my.cnfubuntu 14-16:
/etc/mysql/mysql.conf.d/mysqld.cnfосторожно!
copy_meрезультат может содержать длинный текст, который может быть отделан по умолчанию. Убедитесь, что вы копируете весь текст!
ответ:
если вы хотите отключить постоянно ошибка "выражение #N списка выбора не входит в предложение GROUP BY и содержит неагрегированный столбец 'db.стол.COL', который функционально не зависит от столбцов в предложении GROUP BY; это несовместимо с 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"
sudo service mysql restartперезапустить MySQLэто отключит
ONLY_FULL_GROUP_BYна все пользователи
будьте осторожны при использовании
SET sql_mode = ''это фактически очищает все режимы, включенные в настоящее время. если вы не хотите возиться с другими настройками, вы хотите сделать
SELECT @@sql_modeво-первых, чтобы получить список режимов, разделенных запятыми, затем установите его в этот список без .
дайте этому попытку:
SET sql_mode = ''
Примечание сообщества: как указано в ответах ниже, это на самом деле очищает все режимы SQL в настоящее время включены. Это не обязательно то, что вы хотите.
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 без удаления существующих:
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. Я просто добавил опцию в свой конфиг.yml:
doctrine: dbal: driver: pdo_mysql options: # PDO::MYSQL_ATTR_INIT_COMMAND 1002: "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"это отлично работало для меня.
The документация MySQL также указывает следующие методы:
- Set
sql-mode="<modes>"в файле опций, таких как my.cnf (операционные системы Unix) или my.ini (Windows).- установить режим SQL при запуске сервера через командную строку, используйте тег .
*где
<modes>список различных режимов, разделенных запятыми.чтобы явно очистить режим SQL, установите его в пустую строку с помощью
--sql-mode=""в командной строке, илиsql-mode=""в файле опции.добавил до
/etc/my.cnfи это сработало.это так решением обсуждает способы узнать, какие мои.файл cnf используется MySQL.
Не забудьте перезапустить MySQL после внесения изменений.
On:
- Ubuntu 14.04
- mysql Ver 14.14 Distrib 5.7.16, для Linux (x86_64) с помощью EditLine wrapper
Do:
$ 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
я заметил, что решение @Eyo Okon Eyo работает до тех пор, пока сервер MySQL не перезапущен, а затем восстанавливаются настройки по умолчанию. Вот постоянное решение, которое сработало для меня:
для удаления определенного режима 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, вы можете подробнее об этом здесь:
на моем sql (версия 5.7.11 работает на Mac OS X) эта работа для меня на mysql shell client:
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, STRICT_TRANS_TABLES в 5.6.6 +
на 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.
это будет сохранять конфигурацию режима постоянно. По-другому, если вы просто обновите @@sql_mode через MySQL, потому что он будет сброшен при перезагрузке машины/службы.
после этого, в измененная конфигурация примите меры, перезапустите службу mysql:
$ sudo service mysql restartпопробуйте получить доступ к mysql:
$ mysql -u user_name -pесли вы можете войти и получить доступ к консоли MySQL, это нормально. Отлично!
но, если, как я, вы сталкиваетесь с ошибкой "неизвестной переменной sql_mode", что означает, что sql_mode опция mysqld, вам придется вернуться, отредактировать файл MySQL.cnf снова и изменить
[mysql]до[mysqld]. Перезапустите службу MySQL и выполните последний тест, пытаясь войти в консоль MySQL. Вот оно!
Я использую доктрину, и я добавил driverOptions в моей доктрине.местный.php:
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 пользователь должен супер активирован в привилегиях.
Если вы используете MySQL 8.0.11 so, вам нужно удалить 'NO_AUTO_CREATE_USER' из sql-режима.
добавить следующую строку в файл
/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
это постоянное решение для MySql 5.7+ на Ubuntu 14+:
$ 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Если вы можете войти без ошибок-вы должны быть все готово сейчас.
вы можете отключить его с помощью конфигурационного файла
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"
вот мое решение, изменяющее конфигурацию Mysql через панель мониторинга phpmyadmin:
для того, чтобы исправить "это несовместимо с sql_mode=only_full_group_by": Откройте домашнюю страницу phpmyadmin и goto и выберите подменю "переменные". Прокрутите вниз, чтобы найти режим SQL. Измените режим sql и удалите' ONLY_FULL_GROUP_BY ' сохраните его.



Comments