코이_CO2
LIVING IS DYING
코이_CO2
전체 방문자
오늘
어제
  • 분류 전체보기 (45)
    • TIL ⚓️ (4)
      • OT주차 (1)
      • 1주차_풀스택 미니 프로젝트 (0)
      • 1주차_언어 기초(Java) (0)
      • 2주차_프로그래밍 기초 (1)
      • 3주차_주특기 입문(Spring) (0)
      • 4주차_주특기 숙련(Spring) (2)
    • WIL ⚓️ (0)
      • OT주차 (0)
      • 1주차_언어 기초(Java) (0)
      • 2주차_프로그래밍 기초 (0)
      • 3주차_주특기 입문(Spring) (0)
      • 4주차_주특기 숙련(Spring) (0)
    • Java의 정석 📖 (4)
      • Chapter 1. 자바를 시작하기 전에 (3)
      • Chapter 2. 변수 (0)
      • Chapter 3. 연산자 (0)
      • Chapter 4. 조건문과 반복문 (1)
    • Programmers (7)
      • Lv. 1 (7)
    • 혼자 공부하는 자바 📖 (8)
      • Chapter 05 참조 타입 (0)
      • Chapter 06 클래스 (3)
      • Chapter 07 상속 (1)
      • Chapter 08 인터페이스 (1)
      • Chapter 09 중첩 클래스 & 인터페이스 (0)
      • Chapter 10 예외 처리 (1)
      • Chapter 12 스레드 (1)
    • Java (2)
    • Spring (1)
    • Python (2)
    • Mysql (4)
    • Machine Learning (6)
      • 추측 통계 (2)
    • Data Analysis (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • spring
  • 항해99
  • CRUD
  • LV1
  • 부트스트랩
  • sql
  • 하루기록
  • 혼자 공부하는 자바
  • 개발일지
  • 파이썬
  • java
  • DTO
  • Spring Security
  • programmers
  • 자바
  • 프로그래머스
  • 게시판 프로젝트
  • HTML
  • 스터디
  • 주특기 심화주차
  • 코딩
  • 스프링
  • 배열
  • TIL
  • 개발자
  • TIL/WIL
  • PYTHON
  • 웹개발 종합반
  • 혼자공부하는자바
  • jwt

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
코이_CO2

LIVING IS DYING

MAC 에서의 <MYSQL ERROR CODE: 1055>
Mysql

MAC 에서의 <MYSQL ERROR CODE: 1055>

2022. 8. 10. 16:33

<MYSQL ERROR CODE: 1055>

Error Code: 1055. Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mywork.box_office.ranks' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Error Code: 1055. Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mywork.box_office.ranks' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

Windows 에서는 잘만 되는 코드가 Mac 에서는 Error Code: 1055 가 발생하여 알아보니

 

MySQL 5.7.5 버전기준 이후부터,

 

[선택 목록, 조건 또는 목록이 절에 이름이 지정되지 않은 집계되지 않은 열을 참조하는 쿼리를 허용하지 않습니다] 

 

라고 정의가 변경되었다고 한다.

 

즉,

--> group by 쿼리에 대한 비효율성 해결을 위해 sql_mode 플래그에 only_full_group_by 를 추가

 

이를 해결할 수 있는 방안은 구글링을 해보니 크게 2~3가지 정도 있는 듯 하였지만

 

결국 제일 문제가 되는 ONLY_FULL_GROUP_BY 를 지워주면 된다.

 

SQL workbench를 이용한다면 workbench에서, 터미널을 이용한다면 터미널에서 없애준다.

 

1. 터미널

터미널에 들어가서 아래와 같이 코드를 입력

# sql 경로로 이동
cd /usr/local/mysql/bin/

# 설정한 루트 비밀번호를 p 뒤에 바로 입력 또는 Enter 후 pw 입력하여 sql에 접속한다
./mysql -uroot -p

# 결과
Enter password: _____
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 8.0.30 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

 

sql_mode 조회(방법 2가지)

# 조회 방법 1
mysql> show variables like 'sql_mode';

# 결과
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                 |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

 

# 조회 방법 2
mysql> select @@sql_mode;

# 결과
+-----------------------------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                                            |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

 

위와 같이 설치된 sql_mode 값을 확인하였을 때 ONLY_FULL_GROUP_BY가 있을 건데 이를 지워주도록 한다

 

# 코드 입력
mysql> SET @@SQL_MODE='NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
# 결과
Query OK, 0 rows affected, 1 warning (0.00 sec)

 

제대로 없어졌는지 다시 조회

# 처음 입력했던 조회 방법 중 하나 선택하여 다시 조회
mysql> show variables like 'sql_mode';

# 결과
+---------------+--------------------------------------------------------------------------------+
| Variable_name | Value                                                                          |
+---------------+--------------------------------------------------------------------------------+
| sql_mode      | NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------------------------------------------+
1 row in set (0.00 sec)

ONLY_FULL_GROUP_BY... 가 없어진 것을 확인할 수 있다.

 

 

2. Workbench

워크벤치에 접속하여 아래 코드 입력

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

 

터미널에서의 방법으로 해결이 될테지만 나는 무슨 이유에서인지 터미널에서 위와 같이 했음에도

없앴던 ONLY_FULL_GROUP_BY 가 재접속하였을 때 다시 살아나서 에러를 고칠 수 없었지만

Workbench에서의 방법을 써서 해결했고 에러가 다시 발생하지 않았다.

 

MYSQL을 터미널에서보다 주로 Workbench에서 사용을 하는데 뭔가 모종의 이유로 충돌하는 것인지 뭔지 잘은 모르겠지만 

위에 소개했던 방법 두가지를 쓰면 Error Code: 1055 는 해결될 것이다.

'Mysql' 카테고리의 다른 글

[MySQL] 테이블 및 데이터 타입  (0) 2022.08.16
[MYSQL] 데이터베이스와 SQL  (0) 2022.08.15
[SQL] CRUD 사용  (0) 2022.08.11
    'Mysql' 카테고리의 다른 글
    • [MySQL] 테이블 및 데이터 타입
    • [MYSQL] 데이터베이스와 SQL
    • [SQL] CRUD 사용
    코이_CO2
    코이_CO2
    나에게 찾아오는 뻔한 매일을 언제나 값지게 여길 줄 아는 내가 되기를

    티스토리툴바