Я случайно включил режим ONLY_FULL_GROUP_BY следующим образом:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
Как мне это отключить?
mysql
mysql-workbench
ZviBar
источник
источник
SET sql_mode = ''
?column
) для модификации вашего запроса. Смотрите документ здесьОтветы:
Решение 1. Удалите ONLY_FULL_GROUP_BY из консоли MySQL
Вы можете прочитать больше здесь
Решение 2. Удалите ONLY_FULL_GROUP_BY из phpmyadmin
источник
REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')
, MySQL в любом случае удаляет ненужные запятые из записи. ОП ответ правильный.GLOBAL
у меня не сработало, но сработалоSESSION
.SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'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
Убунту 14-16 :
/etc/mysql/mysql.conf.d/mysqld.cnf
Внимание!
copy_me
результат может содержать длинный текст, который может быть обрезан по умолчанию. Убедитесь, что вы скопировали весь текст!старый ответ:
Если вы хотите навсегда отключить ошибку « Выражение #N списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец« db.table.COL », который не является функционально зависимым от столбцов в предложении GROUP BY; это несовместимо с sql_mode = only_full_group_by "сделать эти шаги:
sudo nano /etc/mysql/my.cnf
Добавьте это в конец файла
sudo service mysql restart
перезапустить MySQLЭто отключит
ONLY_FULL_GROUP_BY
для ВСЕХ пользователейисточник
/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
может отсутствовать в этом файле, оно может быть в каталоге include. Сначала используйте эту команду:grep -R "\[mysqld\]" *
чтобы увидеть, что там есть - и в этом отношении попробуйтеgrep -R "\bsql_mode\b" *
Будьте осторожны, используя
Это на самом деле очищает все режимы, которые в настоящее время включены. Если вы не хотите связываться с другими настройками, вам нужно сделать
сначала, чтобы получить разделенный запятыми список включенных режимов, затем установите его в этот список без
ONLY_FULL_GROUP_BY
опции.источник
then SET it to this list without the ONLY_FULL_GROUP_BY option.
?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';
sql_mode=<comma-separated-list>
затем остановите и запустите ваш сервер. Следуйте документации по вашей операционной системе, чтобы найти и лучший способ отредактировать my.cnf.Попробуйте это:
Примечание сообщества: как указано в ответах ниже, это фактически очищает все включенные в настоящий момент режимы SQL. Это не обязательно то, что вы хотите.
источник
''
='full group by is disabled'
? MySQL делает некоторые довольно глупые вещи, но этот наверху.0 rows affected
и мой запрос все еще не работает:Error Code: 1055. Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column ...
global
команду .источник
sql_mode
откат к предыдущему значению. Что я могу сделать сейчас?Добавление только одного режима в sql_mode без удаления существующих:
Удаление только определенного режима из sql_mode без удаления других:
В вашем случае, если вы хотите удалить только
ONLY_FULL_GROUP_BY
режим, используйте команду ниже:Ссылка: http://johnemb.blogspot.com/2014/09/adding-or-removing-individual-sql-modes.html
источник
Спасибо @cwhisperer. У меня была такая же проблема с Doctrine в приложении Symfony. Я просто добавил опцию в мой config.yml:
Это работало нормально для меня.
источник
SET NAMES
с помощью этого метода, в большинстве случаев не требуется, чтобы symfony уже установил его через doctrine.dbal.charset cofnig: symfony.com/doc/current/reference/configuration/doctrine.html и делает это правильно через PDO dns, SET NAMES - это устаревший способ сделать это, который не должен использоваться для версии PHP выше 5.3На:
Делать:
Скопировать и вставить:
В конец файла
источник
/etc/mysql/mysql.cnf
указывает на 2 папки конфигурации!includedir /etc/mysql/conf.d/
+!includedir /etc/mysql/mysql.conf.d/
. То же самое и для/etc/mysql/my.cnf
. Следовательно, я предполагаю, что файлы конфигурации не перезаписываются при обновлении. Вы можете прочитать больше здесьhttp://dev.mysql.com/doc/mysql/en/server-system-variables.html
sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
может быть, важно/etc/mysql/mysql.conf.d/mysqld_mode.cnf
вместо этого создать новый файлЯ заметил, что решение @Eyo Okon Eyo работает до тех пор, пока сервер MySQL не перезагружается, а настройки по умолчанию восстанавливаются. Вот постоянное решение, которое работало для меня:
Чтобы удалить конкретный режим SQL (в данном случае ONLY_FULL_GROUP_BY ), найдите текущий режим SQL:
скопируйте результат и удалите из него то, что вам не нужно ( ONLY_FULL_GROUP_BY )
например:
в
создайте и откройте этот файл:
и напишите и вставьте в него свой новый режим SQL:
перезапустите MySQL:
Или вы можете использовать
ANY_VALUE()
для подавления отклонения значения ONLY_FULL_GROUP_BY, вы можете прочитать больше об этом здесьисточник
ANY_VALUE()
В документации MySQL также указаны следующие методы:
sql-mode="<modes>"
в файле опций, например, my.cnf (операционные системы Unix) или my.ini (Windows).--sql-mode="<modes>"
параметр.* Где
<modes>
список различных режимов, разделенных запятыми.Чтобы явно очистить режим SQL, задайте для него пустую строку с помощью
--sql-mode=""
командной строки илиsql-mode=""
файла параметров.Я добавил
sql-mode=""
опцию,/etc/my.cnf
и она сработала.В этом SO-решении обсуждаются способы выяснить, какой файл my.cnf используется MySQL.
Не забудьте перезапустить MySQL после внесения изменений.
источник
SELECT @@GLOBAL.sql_mode;
Если вы используете WAMP. Щелкните левой кнопкой мыши на значке WAMP, затем перейдите в раздел MySQL -> Настройки MySQL -> sql-mode и затем выберите sql-mode-> user mode
источник
На моем sql (версия 5.7.11, работающая на Mac OS X) эта работа для меня на клиенте оболочки mysql:
Согласно документации MySQL 5.6, по умолчанию используется sql_mode
пустая строка в MySQL 5.6.5 и обратно NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES в 5.6.6 +
MySQL 5.6 ссылка
источник
sql_mode := ''
что это возможно. Почему ты не согласен?В MySQL 5.7 и Ubuntu 16.04 отредактируйте файл mysql.cnf.
Включите sql_mode, как показано ниже, и сохраните файл.
Обратите внимание, что в моем случае я удалил режим STRICT_TRANS_TABLES и ONLY_FULL_GROUP_BY.
Делая это, он сохранит конфигурацию режима навсегда. Иначе, если вы просто обновите @@ sql_mode через MySQL, потому что он будет сброшен при перезапуске машины / службы.
После этого, чтобы измененная конфигурация начала действовать, перезапустите службу mysql:
Попробуйте получить доступ к MySQL:
Если вы можете войти и получить доступ к консоли MySQL, это нормально. Большой!
НО , если , как я, вы сталкиваетесь ошибка «неизвестная переменная sql_mode» , что указывает на sql_mode вариант для туздЫ , вам придется снова вернуться, редактировать файл mysql.cnf и изменить
[mysql]
к[mysqld]
. Перезапустите службу MySQL и выполните последний тест, пытаясь войти в консоль MySQL. Вот!источник
Вот что я выполнил, чтобы исправить на Mysql Workbench:
Прежде чем я получил текущее значение с помощью команды ниже
позже я удалил ключ ONLY_FULL_GROUP_BY из списка и вставил команду ниже
источник
Добавить или удалить режимы
sql_mode
MySQL 5.7.9 или позже
Чтобы добавить или удалить режим из
sql_mode
, вы можете использоватьlist_add
иlist_drop
функции.Чтобы удалить режим из текущего
SESSION.sql_mode
, вы можете использовать одно из следующих:Чтобы удалить режим из режима,
GLOBAL.sql_mode
который сохраняется для текущей операции времени выполнения , до тех пор, пока служба не будет перезапущена .MySQL 5.7.8 или более ранняя версия
Поскольку
sql_mode
значение представляет собой строку режимов CSV, вам необходимо убедиться, что строка не содержит остаточных запятых, что можно сделать с помощьюTRIM(BOTH ',' FROM ...)
.Чтобы удалить режим с
sql_mode
переменной, вы хотели бы использоватьREPLACE()
вместе с ,TRIM()
чтобы обеспечить любые остаточные запятые удаляются.Чтобы добавить режим к
sql_mode
переменной, вы хотели бы использовать ееCONCAT_WS(',', ...)
, чтобы обеспечить добавление запятой к текущим режимам иTRIM()
удалить все оставшиеся запятые.Вернуться к
GLOBAL.sql_mode
Поскольку
SET sql_mode = 'ONLY_FULL_GROUP_BY';
было выполнено безGLOBAL
модификатора, изменение коснулось толькоSESSION
значения текущего состояния, которое также относится к@@sql_mode
. Чтобы удалить его и вернуться к глобальному значению по умолчанию при перезапуске сервера , вы должны использовать значение из@@GLOBAL.sql_mode
. [так в оригинале]Чтобы вернуть текущее значение состояния сеанса к текущему глобальному значению, вы можете использовать одно из следующих:
Изменить
SESSION.sql_mode
значение наONLY_FULL_GROUP_BY
Вернуть
SESSION.sql_mode
значение кGLOBAL.sql_mode
значениюПерезагрузка сервера постоянная
sql_mode
Пожалуйста, ознакомьтесь с вашей версией MySQL, чтобы определить поддерживаемый режим и режим по умолчанию .
sql_mode
Значения по умолчаниюТак как значения версии для документации MySQL были удалены, я добавил их сюда для справки.
MySQL> = 8.0.11 8.0.5 - 8.0.10 Пропущено
MySQL> = 5.7.8, <= 8.0.4
MySQL 5.7.7
MySQL> = 5.7.5, <= 5.7.6
MySQL> = 5.6.6, <= 5.7.4
MySQL <= 5.6.5
источник
Для Mac OS Mojave (10.14) Открытый терминал
Вставьте следующее:
Клавиши для сохранения и выхода из нано:
Ctrl+x
иy
иEnter
Примечание: вам может потребоваться обновить
mysql-5.7.24-macos10.14-x86_64
эти команды, просто проверьте правильное имя папки, которое вы получили в/usr/local/
Надеюсь, это поможет кому-то!
источник
Если вы используете MySQL 8.0.11, вам нужно удалить NO_AUTO_CREATE_USER из sql-режима.
Добавьте следующую строку в файл
/etc/mysql/my.cnf
и заголовок [mysqld]источник
Я использую doctrine, и я добавил driverOptions в мой doctrine.local.php:
В phpmyadmin пользователю необходимо активировать SUPER в привилегиях.
источник
Для кого работает VPS / сервер с cPanel / WHM , вы можете сделать следующее, чтобы навсегда отключить ONLY_FULL_GROUP_BY
Вам нужен root-доступ (на VPS или на выделенном сервере)
Введите WHM от имени пользователя root и запустите phpMyAdmin.
Нажмите «Переменные», найдите
sql_mode
, нажмите «Изменить» и скопируйте всю строку внутри этого текстового поля.например, скопируйте это:
Подключитесь к вашему серверу через SFTP - SSH (root) и загрузите файл
/etc/my.cnf
Откройте
my.cnf
файл текстового редактора на локальном ПК и вставьте в него (в[mysqld]
разделе) всю строку, скопированную на шаге (2), но удалитеONLY_FULL_GROUP_BY,
например, вставьте это:
Сохраните
my.cnf
файл и загрузите его обратно в/etc/
Введите WHM и перейдите к «WHM> Перезапустить службы> SQL Server (MySQL)» и перезапустите службу
источник
Я работаю с MySQL и зарегистрирован с пользователем root, решение, которое работает для меня заключается в следующем:
источник
Это постоянное решение для MySql 5.7+ в Ubuntu 14+:
Если вы можете войти без ошибок - у вас все должно быть настроено.
источник
Вы можете отключить его, используя файл конфигурации
my.cnf
:Так что в macOS 10.12 это на
usr/local/etc/my.cnf
. Вы можете редактироватьsql_mode
здесь:источник
Вот мое решение изменить конфигурацию Mysql через панель управления phpmyadmin:
Чтобы исправить «это несовместимо с sql_mode = only_full_group_by»: откройте phpmyadmin и перейдите на домашнюю страницу и выберите подменю «Variables». Прокрутите вниз, чтобы найти режим sql. Отредактируйте режим sql и удалите «ONLY_FULL_GROUP_BY». Сохраните его.
источник
с MySQL версии 5.7.28 проверьте с помощью
SELECT @@sql_mode;
и обновите систочник