【发布时间】:2021-04-20 02:41:04
【问题描述】:
我正在使用 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 设置中。这是 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',''));
但我只得到以下结果:
访问被拒绝;您需要(至少其中之一)SUPER 或 SYSTEM_VARIABLES_ADMIN 权限才能执行此操作
它必须是我可以在我的 docker-compose.yml 文件中执行的操作,这将允许我运行查询而不会出现聚合错误。
如果没有,我怎样才能成功运行带有聚合函数的查询而不会出错?
我尝试过的来源:
编辑
这是我刚刚测试的一个简单查询,它产生了相关错误:
SELECT
uid,
COUNT(pol)
FROM
myTable
【问题讨论】:
-
该警告阻止您运行结果不确定的查询。尝试修复查询是更推荐的做法。
-
@WillemRenzema - 我更新了我的问题以包含我运行的一个简单查询,该查询产生了错误。
-
@WillemRenzema - 另外,当我在实时服务器上运行相同的查询时,我没有得到聚合错误。
标签: php docker pdo docker-compose mysql-8.0