Mysql 5.7 이상 버 전 ONLYFULL_GROUP_BY 오류 해결 방법

최근 개발 과정 에서 프로젝트 개발 환경 에 연 결 된 my sql 데이터 베 이 스 는 아 리 클 라 우 드 의 데이터 베이스 이 고 아 리 클 라 우 드 의 데이터 베이스 버 전 은 5.6 이다.환경 을 테스트 하 는 my sql 은 자신 이 설치 한 5.7 이다.그래서 개발 과정 에서 일부 파트너 가 group by 와 관련 된 sql 문 구 를 주의 하지 않 고 썼 다.개발 환경 에서 운행 하 는 것 은 정상 이 고 테스트 환경 에서 이상 이 발견 되 었 다.
원인 분석:MySQL 5.7 버 전 기본 설정 mysql sqlmode = only_full_group_by 속성,오류 발생.
그 중 ONLYFULL_GROUP_BY 는 이 오 류 를 일 으 킨 원흉 입 니 다.group by 취 합 작업 에 있어 서 select 에 있 는 열 이 group by 에 나타 나 지 않 으 면 이 SQL 은 합 법 적 이지 않 습 니 다.group by 종문 에 열 이 없 기 때문에 sql 을 설정 하 였 습 니 다.mode=only_full_group_by 데이터베이스,group by 를 사용 할 때 오류 가 발생 합 니 다.
테스트 환경 다운로드 에 설 치 된 것 은 최신 버 전의 my sql 5.7.x 버 전 입 니 다.기본 값 은 only 가 열 렸 습 니 다.full_group_by 모드 의 경우,이 모드 를 켜 면 원래 의 group by 문 구 를 잘못 보고 한 다음 에 다시 제거 합 니 다.
일단 오픈 시 onlyfull_group_by.group by 는 distinct 와 마찬가지 로 그 영향 을 받 는 필드 정보 만 얻 을 수 있 고 그 영향 을 받 지 않 은 다른 필드 와 공존 할 수 없 을 것 같 습 니 다.그러면 group by 의 기능 이 매우 좁 아 집 니 다.
only_full_group_by 모드 오픈 이 좋 습 니 다.my sql 에 함수 가 있 기 때 문 입 니 다:anyvalue(field)는 그룹 필드 가 아 닌 출현(only 닫 기)을 허용 합 니 다.full_group_by 모드 는 같은 효과 가 있 습 니 다).
1,sql 보기mode

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
2、ONLY 제거FULL_GROUP_BY,값 을 다시 설정 합 니 다.

SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
3.위 는 전체 sql 을 바 꾸 었 습 니 다.mode,새 데이터베이스 에 유효 합 니 다.존재 하 는 데이터베이스 에 대해 서 는 해당 하 는 데이터 에서 실행 해 야 합 니 다.

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';
상기 방법 my sql 데이터 베 이 스 를 다시 시작 한 후에 도 유효 하지 않 습 니 다.다음 방식 으로 다시 시작 한 후에 도 유효 합 니 다.
MySQL 의 프로필 을 찾 아 Liux 시스템 에서/etc/my.cnf 파일 을 찾 아 sql 을 조회 합 니 다.mode 필드,설정 파일 에서 이 키 워드 를 찾 지 못 했 기 때문에 수 동 으로 추가 합 니 다:

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
주의해 야 할 것 은[my sqld]설정 에 추가 해 야 합 니 다.이렇게 추가 한 후에 my sql 을 다시 시작 해 야 유효 합 니 다.데이터 베 이 스 를 종료 합 니 다:exit,재 부팅 명령:

service mysqld restart
페이지 리 셋 오류 정보 사라 짐 성공 해결,데이터 베 이 스 를 다시 연결 하여 sql 보기mode 설정 select@@sqlmode:

STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Mysql 5.7 이상 버 전 ONLYFULL_GROUP_BY 잘못된 해결 방법 에 대한 글 은 여기까지 입 니 다.Mysql 5.7 ONLYFULL_GROUP_BY 콘 텐 츠 는 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기