我在 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 后,我发现它确实适用于某些查询,但对于其他查询,它仍然抛出相同的异常。我不知道该怎么办。请帮我解决这个问题。
谢谢