문제 상황
- group by 절을 사용하는 퀴리를 날릴 때
Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'artzip.reviewlike1_.user_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
에러 발생
sql_mode=only_full_group_by
로 인한 에러
문제 원인
5.7 Version에서는 sql_mode 항목이 생겼으며 그 옵션 안에 only_full_group_by 내용이 존재함에 따라 발생sql_mode란? MySql에 저장될 데이터에 대한 유효성 검사 범위를 설정하는 시스템 변수
해결
개발 및 서버 환경
mysql console에서 mysql version, sql_mode 확인하는 법
# mysql version 확인 select version(); # sql_mode 확인 select @@sql_mode;
- 개발 환경
- docker mysql version 8.0.30
- sql_mode:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
- 서버 환경
- AWS RDS mysql version 8.0.28
- sql_mode:
STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
mysql docker container를 새로 생성
- 실행중인 컨테이너의 옵션을 바로 변경하는 방법은 없음. 옵션을 주고 컨테이너를 run해야 함. (참고: docker - container 옵션 변경 - mysql 기준)
- 서버 환경과 같은 옵션으로 mysql docker container 실행
--sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
docker run --name artzip-mysql-new -e MYSQL_ROOT_PASSWORD=root1234 -d -p 3306:3306 mysql/mysql-server:8.0 --sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
(+)
- (+) mysql에 user 생성 및 권한주기
# mysql console 접속 docker exec -it artzip-mysql-new mysql -u root -p # 비밀번호 입력 (root1234) # 콘솔에 아래 명령어 실행 create user 'root'@'%' IDENTIFIED BY 'root1234'; grant all privileges ON *.* TO 'root'@'%' with grant option;
- (+) database 생성하기
create database artzip; use artzip; # 확인 select database();