Отключить только полную группу по
я случайно включил режим ONLY_FULL_GROUP_BY следующим образом:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
как его отключить?
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.cnf
ubuntu 16 и выше: sudo nano /etc/mysql/my.cnf
ubuntu 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. У меня была такая же проблема с Doctrine в приложении 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',''))"
это отлично сработало для меня.
на документация 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-сервера версия 14.14 дистриб 5.7.16, для Linux (x86_64 с), используя EditLine фантик
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
Если вы используете WAMP. Щелкните левой кнопкой мыши на значке WAMP, затем goto MySQL - > mysql settings - > sql-mode а затем выберите sql-mode - >user mode
я заметил, что решение @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
to
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" сохраните его.