5

我在 Ubuntu 16.04 上使用 mysql 版本 5.7.12。我在运行我的 Web 应用程序时注意到以下异常:

SQL 异常:SELECT 列表的表达式 #x 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“something.something”;这与 sql_mode=only_full_group_by 不兼容

它曾经在 mysql 5.5 上完美运行。我在网上寻找解决方案。我可以理解为什么他们在 5.7 版中默认强制执行 only_full_group_by mysql_mode。但是,在这个阶段我无法返回代码并继续更正查询。我选择按照此处的建议通过编辑 /etc/mysql/my.cnf 文件来禁用此 sql_mode 。通过将以下行附加到 my.cnf 的末尾并重新启动 mysql。

[mysqld]
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

为了验证它是否有效,我在 mysql 控制台中尝试了以下命令:

SELECT @@sql_mode;

SELECT @@GLOBAL.sql_mode;

SELECT @@SESSION.sql_mode;

所有这些都返回相同的结果,如下所示:

+-------------------------------------------------- --------------------------------------------+ | @@GLOBAL.sql_mode | +-------------------------------------------------- --------------------------------------------+ | STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +-------------------------------------------------- --------------------------------------------+

一组中的 1 行(0.00 秒)

启动我的 webapp 后,我发现它确实适用于某些查询,但对于其他查询,它仍然抛出相同的异常。我不知道该怎么办。请帮我解决这个问题。

谢谢

4

1 回答 1

2

请检查您的文件系统中是否多次出现 my.cnf 文件,这可能会覆盖上面指定的 sql_mode。

于 2016-08-04T10:04:52.397 回答