>데이터 베이스 >MySQL 튜토리얼 >MySQL 설정 only_full_group_by의 오류 보고 문제를 자세히 설명하는 기사

MySQL 설정 only_full_group_by의 오류 보고 문제를 자세히 설명하는 기사

藏色散人
藏色散人앞으로
2023-01-24 07:30:012596검색

MySQL 설정 only_full_group_by의 오류 보고 문제를 자세히 설명하는 기사

개발 환경은 mysql5.6에 연결되어 있고, 테스트 환경은 mysql5.7에 연결되어 있습니다. 개발 중에 친구가 group by에 대한 sql 문을 작성했습니다. 개발 환경에서는 정상적으로 실행되지만, 테스트 환경에서는 예외가 발견됩니다. mysql5.6,而测试环境是 mysql5.7。开发中有小伙伴写了有关 group bysql 语句。在开发环境中运行是正常的,而到了测试环境中就发现了异常。

原因分析:MySQL5.7 版本默认设置了 mysql sql_mode = only_full_group_by 属性,导致报错。

其中 ONLY_FULL_GROUP_BY 就是造成这个错误的罪魁祸首了,在这种严格模式下,对于 group by 聚合操作,若在 select 中的列没有在group by 中出现,那么这个 SQL 就是不合法的。因为开发写的 sql 中,select 列不在 group by 从句中,在使用 group by 时就会报错。

测试环境下载安装的是最新版的 mysql5.7.x 版本,默认是开启了 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'``;

以上方法mysql数据库重启后依然无效,下列方式重启后依然生效

找到 MySQL 的配置文件,在 linux 系统上 /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

需要注意的一点是一定要添加在 [mysqld] 配置内,这样添加完后重启mysql 才会生效,退出数据库:exit,重启命令:

service mysqld restart

#lnmp重启mysql
lnmp restart mysql

刷新页面报错信息消失成功解决,再次连接上数据库查看 sql_mode 配置 select @@sql_mode :

STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

到此这篇关于 Mysql5.7 及以上版本 ONLY_FULL_GROUP_BY 报错的解决方法的文章就介绍到这了,更多相关 Mysql5.7 ONLY_FULL_GROUP_BY

원인 분석: MySQL5.7 버전에는 기본적으로 mysql sql_mode = only_full_group_by 속성이 설정되어 있어 오류가 발생합니다.

그 중 ONLY_FULL_GROUP_BY가 이 엄격 모드에서 group by 집계 작업에 대해 select에 있는 경우입니다. 의 열이 group by에 나타나지 않으면 이 SQL은 불법입니다. 개발자가 작성한 sql에는 group by를 사용할 때 group by 절에 select 열이 없기 때문입니다. 코드> 오류를 보고합니다.

테스트 환경은 최신 버전의 mysql5.7.x를 다운로드하여 설치했습니다. only_full_group_by 모드가 기본적으로 활성화되어 있습니다.

1. sql_mode를 확인하세요

rrreee

쿼리된 값은

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_C REATE_입니다. USER,NO_ENGINE_SUBSTITUTION

2. ONLY_FULL_GROUP_BY를 제거하고 값을 재설정하세요. .

rrreee

3. 위의 내용은 새로 생성된 데이터베이스에 유효한 전역 sql_mode를 변경합니다.

기존 데이터베이스의 경우 해당 데이터 아래에서 실행해야 합니다

rrreee위의 방법은 mysql 데이터베이스를 다시 시작한 후에도 여전히 유효하지 않으며, 다음 방법은 다시 시작한 후에도 여전히 유효합니다

🎜 MySQL 파일, linux 시스템의 /etc/my.cnf 파일에서 sql_mode 필드를 쿼리합니다. 구성 파일에서 이 키워드를 찾을 수 없어서 수동으로 추가했습니다. 🎜rrreee🎜한 가지 주의할 점은 [mysqld] 구성에 추가해야 하므로 추가한 후 다시 시작하세요. mysql이 적용되고 종료됩니다. 데이터베이스: 종료, 다시 시작 명령: 🎜rrreee🎜페이지를 새로 고치면 오류 메시지가 사라지고 성공적으로 해결됩니다. sql_mode code>를 구성하세요. ​​​​SQL_mode의 참조: 🎜🎜🎜ONLY_FULL_GROUP_BY: GROUP BY 집계 작업의 경우 SELECT의 열이 GROUP BY에 나타나지 않으면 열이 GROUP BY 절에 없기 때문에 이 SQL은 유효하지 않습니다🎜🎜NO_AUTO_VALUE_ON_ZERO : 이 값은 자동 증가 열의 삽입에 영향을 줍니다. 기본 설정에서 0 또는 NULL을 삽입하면 다음 자동 증가 값이 생성되는 것을 나타냅니다. 이 옵션은 사용자가 0 값을 삽입하려고 하고 열이 자동 증가하는 경우 유용합니다. 🎜🎜STRICT_TRANS_TABLES: 이 모드에서는 트랜잭션 테이블에 값을 삽입할 수 없으면 현재 작업이 중단되고 비 트랜잭션 테이블에는 제한이 없습니다. 🎜🎜NO_ZERO_IN_DATE: 엄격 모드에서는 날짜와 월이 지정됩니다. not allowed to be zero🎜 🎜NO_ZERO_DATE: 이 값을 설정하면 mysql 데이터베이스는 0 날짜 삽입을 허용하지 않으며 0 날짜를 삽입하면 경고 대신 오류가 발생합니다. 🎜🎜ERROR_FOR_DIVISION_BY_ZERO: INSERT 또는 UPDATE 중에 데이터를 0으로 나누면 경고 대신 오류가 생성됩니다. 모드가 지정되지 않은 경우 데이터가 0으로 나누어지면 MySQL은 NULL을 반환합니다. 🎜🎜NO_AUTO_CREATE_USER: GRANT가 빈 비밀번호를 사용하여 사용자를 생성하지 못하도록 합니다. 🎜🎜NO_ENGINE_SUBSTITUTION: 필요한 스토리지 엔진이 비활성화되거나 컴파일되지 않은 경우 오류가 발생합니다. 이 값이 설정되지 않으면 기본 스토리지 엔진이 대신 사용되며 예외가 발생합니다. 🎜🎜PIPES_AS_CONCAT: "||"를 OR 연산자 대신 문자열 연결 연산자로 처리합니다. 문자열 연결 함수 Concat🎜🎜ANSI_QUOTES: ANSI_QUOTES를 활성화한 후에는 식별자로 해석되므로 큰따옴표를 사용하여 문자열을 인용할 수 없습니다. 🎜🎜추천 학습: "🎜MySQL 비디오 튜토리얼🎜"🎜🎜

위 내용은 MySQL 설정 only_full_group_by의 오류 보고 문제를 자세히 설명하는 기사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제