我正在使用Docker生成一个MySQL 8容器,以及PHP 7和phpMyAdmin。
在运行带有聚合函数的查询时,phpMyAdmin出现了问题。我想也许phpMyAdmin有什么问题。
所以我把它带到另一个数据库应用程序,叫做Navicat。我创建了到Docker MySQL 8容器的成功连接,当我试图运行相同的查询时,得到了相同的错误。详情如下:
In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column 'myDb.mytable.uid';
this is incompatible with sql_mode=only_full_group_by这使我相信,问题必须在我的码头设置。下面是docker-compose.yml文件:
version: "3.7"
services:
www:
build: .
ports:
- "8001:80"
volumes:
- ./www:/var/www/html/
links:
- db
networks:
- default
db:
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: myDb
MYSQL_USER: user
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
volumes:
- ./dump:/docker-entrypoint-initdb.d
networks:
- default
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- db:db
ports:
- 8000:80
environment:
MYSQL_USER: user
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
volumes:
mysql-data:
persistent:这是我的Dockerfile:
FROM php:7.0.30-apache
RUN docker-php-ext-install pdo pdo_mysql我看到了几篇文章,告诉我使用以下命令更新sql_mode:
SET sql_mode = ''但是返回的结果为零,我仍然得到相同的聚合错误。
我尝试了这个查询:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));但我只得到以下结果:
拒绝
访问;此操作需要(至少一个)超级权限或SYSTEM_VARIABLES_ADMIN权限
它必须是我可以在我的docker-compose.yml文件中做的事情,这样我就可以运行查询,而不会得到聚合错误。
如果没有,我如何在没有错误的情况下成功地运行聚合函数的查询?
我曾尝试过以下消息来源:
编辑
下面是我刚刚测试的一个简单的查询,它产生了问题中的错误:
SELECT
uid,
COUNT(pol)
FROM
myTable发布于 2021-01-15 03:22:34
SELECT
uid,
COUNT(pol)
FROM
myTable这个查询是随机返回单个uid (更准确地说,是不确定的),以及整个表中的非空pol值的数量(所以,1行结果)。它给出了警告,因为每次运行查询时,uid都可能有所不同。(即使您重复运行它,它可能看起来是相同的值,它可能在任何时候都会改变。)
很可能,你想要这样的东西:
SELECT
uid,
COUNT(pol)
FROM
myTable
GROUP BY uid这将为每个uid返回一行,以及该uid的非空pol值的数目。
您的原始查询没有很好地定义(相同查询和数据集的不同结果),这就是您看到错误的原因,该错误首先存在以保护您。不同的服务器没有给出错误的事实很可能是不同的sql_mode或不同的MySQL版本造成的。
https://stackoverflow.com/questions/65729815
复制相似问题