我在Ubuntu 16.04上使用mysql版本5.7.12.运行我的Web应用程序时,我注意到以下异常:
SQL Exception : Expression #x of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘something.something’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with 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 row in set (0.00 sec)
在启动我的webapp之后,我发现它确实适用于某些查询,但对于其他查询,它仍然会引发相同的异常.我不知道该怎么办.请帮我解决这个问题.
谢谢
解决方法:
请检查文件系统中多次出现的my.cnf文件,该文件可能会覆盖上面指定的sql_mode.