MySQLОшибка 1055: ONLY_FULL_GROUP_BY: что-то не в условии GROUP BY ...


Вступление

Недавно новые версии серверов MySQL начали генерировать 1055 ошибок для запросов, которые раньше работали. В этом разделе объясняются эти ошибки. Команда MySQL работает над отказом от нестандартного расширения до GROUP BY или, по крайней мере, для того, чтобы затруднить его работу с разработчиками запросов.

замечания

В течение долгого времени MySQL содержал печально известное нестандартное расширение GROUP BY , которое позволяет использовать поведение oddball во имя эффективности. Это расширение позволило бесчисленным разработчикам по всему миру использовать GROUP BY в производственном коде без полного понимания того, что они делают.

В частности, это плохая идея использовать SELECT * в запросе GROUP BY , потому что стандартное предложение GROUP BY требует перечисления столбцов. К сожалению, многие разработчики этого сделали.

Прочитай это. https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

Команда MySQL пытается исправить эту ошибку, не испортив производственный код. Они добавили флаг sql_mode в 5.7.5 с именем ONLY_FULL_GROUP_BY чтобы заставить стандартное поведение. В недавнем выпуске они по умолчанию включили этот флаг. Когда вы обновили свой локальный MySQL до 5.7.14, флаг включился, и ваш производственный код, зависящий от старого расширения, перестает работать.

Если вы недавно начали получать 1055 ошибок, каковы ваши варианты?

  1. исправить оскорбительные SQL-запросы или заставить их авторов сделать это.
  2. перейдите к версии совместимого с MySQL совместимого программного обеспечения, которое вы используете.
  3. измените sql_mode вашего сервера, чтобы избавиться от нового режима ONLY_FULL_GROUP_BY .

Вы можете изменить режим, выполнив команду SET .

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.

Или вы можете найти файл инициализации в вашей установке MySQL , найти sql_mode= и изменить его, чтобы опустить ONLY_FULL_GROUP_BY , и перезагрузить сервер.

Ошибка 1055: ONLY_FULL_GROUP_BY: что-то не в условии GROUP BY ... Связанные примеры