"SELECT列表的表达式#3不在GROUP BY子句中,并且包含非聚合列"database_name.iid"功能不正常依赖于GROUP BY子句中的列;这与sql_mode=only_full_group_by";
嗨,对不起,英语。当我对我的项目进行码头化时,MySQL和Django出现了问题。我对这些技术很陌生。这是我的docker组成文件的一部分:
db_mysql:
image: mysql:8
container_name: db_mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: database_name
MYSQL_USER: user
MYSQL_PASSWORD: password
ports:
- '3306:3306'
expose:
- '3306'
volumes:
- dbdata:/var/lib/mysql
当我部署项目并输入一个节时,问题就会出现。我最初显示的信息出现了。
我试图应用这篇文章中提到的内容,但问题仍然存在。SELECT列表不在GROUP BY子句中,并且包含非聚合列。。。。与sql_mode=only_full_group_by 不兼容
我做了以下事情:我进入了数据库的容器:
docker exec -it db_mysql bash
我以root用户身份登录MySQL:
mysql -u root -p
我放置了更改SQL_MODE:值的命令
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
我检查了一下是否进行了更改:
SELECT @@sql_mode;
我退出容器并用重新启动它
docker restart db_mysql
当我回到这个项目时,问题仍然存在。
帖子说我必须重新启动MySQL才能保留更改。但是当我尝试从容器运行重启时,它告诉我服务命令不存在:
service mysqld restart
您阅读了不正确的建议。重新启动mysqld服务会重置您对SET GLOBAL
所做的任何更改。配置将恢复为默认值。
如果您想在docker容器启动时自动设置全局变量,可以执行以下操作之一:
- 将选项作为参数传递给容器的命令
- 在配置文件中设置选项,并在容器中引用该文件
阅读https://ahelpme.com/software/docker/edit-mysql-options-in-docker-or-docker-compose-mysql/获取有关如何同时使用这两种方法的指南。
也就是说,我同意上面的评论,即您不应该禁用ONLY_FULL_GROUP_BY。防止无效查询非常重要。