php - 升级 WAMP SERVER 后 MySql 抛出错误

标签 php mysql

SELECT * FROM (SELECT * FROM notifications WHERE popped = '0' ORDER BY id DESC) t WHERE t.userTo = '".$myId."' GROUP BY t.noteId, t.dataId, t.type

上面的代码在我的 Wamp 服务器上完美运行,该服务器运行在 MYSQL5.5.8 上。然后我升级到最新的 Wamp v3.0.6,它在 MYSQL5.7.14 上运行,我开始收到 #1055 错误。

最后,我在下图中想出了这段代码 SQL Query

但我收到此错误 Error thrown back

我已尽我所能,但无法修复此错误。有人可以帮我解决这个问题吗?

我真的需要子查询

最佳答案

这里有一个解决方法,可以让 MySQL 5.7 在 GROUP BY 查询中像之前的版本一样运行 - 这不应该是公认的答案:

首先,找出您当前的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

您看到的错误是由 ONLY_FULL_GROUP_BY 标志引起的。您可以更新 MySQL 配置文件以删除该标志。查找并编辑您的 my.cnf 文件(IIRC,您可以从任务栏图标中的 WAMP 菜单访问它,但自从我上次使用 WAMP 以来已经有几年了,所以情况可能已经改变)。

检查其中是否已经定义了sql_mode。如果没有,请将其添加到 [mysqld] 标题下的某个位置。使其值与您从上一个查询中获得的 sql_mode 相同,减去 ONLY_FULL_GROUP_BY 标志。所以就我而言,这将是:

[mysqld]
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 以加载更改。

请注意,对 my.cnf 文件所做的更改很可能会在您下次更新 WAMP 时被覆盖,因此这不是永久解决方案。要实现永久修复,您应该更新查询以与默认 sql_mode 兼容。

关于php - 升级 WAMP SERVER 后 MySql 抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46330249/

相关文章:

php - 如何在基于SimpleSAMLphp的IdP中用属性替换NameId的值?

php - 查找嵌套深度

php - 创建表 : Syntax error

mysql - 玩转框架 MySQL 和 EBean

php - Laravel 将数据持久保存到数据库为空,同时返回所有语句显示正确的数据

php - Contentful - 内容管理 API 的示例代码

mysql - 将 CONCAT 与 MySQL 触发器一起使用(在 , 处出错)

PHP MySQL 可能存在语法错误

php - 无法显示查询结果

php - 捕获 mysql pdo 错误