mysql5.7에서 "SELECT list is not in GROUP BY clause"오류가 발생했습니다.

2720 단어 MySQLhomebrewmysql5.7

환경


$ mysql -V
mysql  Ver 14.14 Distrib 5.7.20, for osx10.12 (x86_64) using  EditLine wrapper

대응



mysql 5.6 -> 5.7로 했을 때에 sql_mode의 초기 설정이 변경되고 있었던 것이 원인이었습니다.
local에는 homebrew로 mysql을 설치하고 있었으므로, my.cnf의 변경과 재기동으로 대응합니다.

mysql의 SQL 모드 확인


SELECT @@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

여러 가지가 있습니다 ...
(mysql5.7부터 7개의 SQL 모드가 초기 설정되어 있다고 합니다)

my.cnf의 SQL 모드 변경



my.cnf의 위치를 ​​확인합니다.
$ mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

SQL 모드는 우선 비어있을 때입니다.
(이번 오류의 원인 ONLY_FULL_GROUP_BY을 제거하는 것만으로도 좋습니다)

/usr/local/etc/my.cnf
  # Default Homebrew MySQL server config
  [mysqld]
  # Only allow connections from localhost
  bind-address = 127.0.0.1
+ sql_mode = ""

mysql 서버 재부팅


$ mysql.server restart

Done.

참고


  • 탈! 푹신한 MySQL - Qiita
  • Hemebrew로 넣은 MySQL의 my.cnf를 설정
  • MySQL :: MySQL 5.6 참조 설명서 :: 5.1.7 서버 SQL 모드
  • 좋은 웹페이지 즐겨찾기