我在Ubuntu 16.04上使用mysql版本5.7.12。运行我的Web应用程序时,我注意到以下异常:
SQL异常:SELECT列表的表达式#x不在GROUP BY子句中,并且包含非聚合列' something.something'它在功能上不依赖于GROUP BY子句中的列;这与sql_mode = only_full_group_by
不兼容
它曾经在mysql 5.5上完美运行。我在网上寻找解决方案。我可以理解为什么他们在版本5.7中默认强制执行only_full_group_by mysql_mode。但是,在此阶段我无法承担返回代码并继续更正查询的费用。我选择通过编辑/etc/mysql/my.cnf文件来禁用此sql_mode,如建议here。 通过将以下行附加到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后,我发现它确实适用于某些查询,但对于其他查询,它仍然会抛出相同的异常。我不知道该怎么做。请帮我解决这个问题。
由于
答案 0 :(得分:1)
请检查文件系统中多次出现的my.cnf文件,该文件可能会覆盖上面指定的sql_mode。