我的项目中配置了两个数据库,一个在我的本地计算机上运行,另一个在远程服务器上运行。访问远程数据库服务器时没有任何问题,但访问本地MySQL数据库时出现以下错误。
WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: 1140, SQLState: 42000
ERROR [org.hibernate.util.JDBCExceptionReporter] Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
我看过MySQL文档,但无法完全理解根本原因。
我认为,因为我可以从远程数据库中获取相同的数据,然后java code and query
是正确的。
答案 0 :(得分:2)
以下查询在启用ONLY_FULL_GROUP_BY
时无效。第一个是无效的,因为选择列表中的名称未在GROUP BY
子句中命名
mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
如果没有GROUP BY子句 ,没有GROUP列的 是非法的
您可以重新编写查询以正常工作 或 关闭ONLY_FULL_GROUP_BY,错误消失。 链接可以帮助您 更新 这是您的评论的答案。 MySQL服务器可以在不同的SQL模式下运行,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于 要在服务器启动时设置SQL模式,请在命令行上使用 要在运行时更改SQL模式,请使用 要确定当前的全局或会话sql_mode值,请使用以下语句: 您可以参考sql_mode table 这是因为MySQL版本。什么是本地计算机的MySQL版本? 如何查看MySQL版本? 为了测试sql_mode 1)MySQL版本 5.0.45-community-nt 失败了,将sql_mode设置为 2)MySQL版 5.1.40-community 然后设置sql_mode 3)MySQL版本 5.5.28 然后设置sql_mode 结论 正如您所看到的,在5.0.45版本上查询失败,并且在5.1.40和5.5.28之后/之后成功
在没有 一些有趣的错误和sql_mode faq链接mysql> SELECT name, MAX(age) FROM t GROUP BY name;
But i would like to know more about disabling the Group BY mode in mysql db.
sql_mode
系统变量的值。此功能使每个应用程序能够根据自己的要求定制服务器的操作模式。 --sql-mode="modes"
选项,或在sql-mode="modes"
或{{1}等选项文件中使用my.cnf (Unix operating systems)
}。 modes是由逗号分隔的不同模式的列表。要显式清除SQL模式,请在命令行上使用my.ini (Windows)
将其设置为空字符串,或在选项文件中使用--sql-mode=""
。 sql-mode=""
用于设置sql_mode系统变量的语句。设置 GLOBAL变量需要SUPER权限并影响从那时起连接的所有客户端的操作。设置SESSION变量仅影响当前客户端。任何客户端都可以随时更改自己的会话sql_mode值。 SET [GLOBAL|SESSION] sql_mode='modes'
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28 |
+-----------+
1 row in set (0.00 sec)
,我创建了表ONLY_FULL_GROUP_BY
,其中包含两列patient
和插入的记录。请记住,sql_mode id, name
不是默认设置,您需要设置。 ONLY_FULL_GROUP_BY
SELECT name, MAX(id) FROM patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
是没有意义的,因为它不允许在GROUP BY子句中未命名的非聚合列。 ONLY_FULL_GROUP_BY
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
ONLY_FULL_GROUP_BY
mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
ONLY_FULL_GROUP_BY
mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
的MySQL版本5.1.10(not sure)查询失败之前,无论是否设置了sql_mode GROUP BY
。
答案 1 :(得分:0)
您需要包含GROUP BY
子句(您没有发布您的查询,但我猜您根据错误遗漏了一个)。这只是你的本地主机而不是远程服务器上的问题,因为远程服务器可能已关闭ONLY_FULL_GROUP_BY,但你的本地数据库已启用它。
理想情况下,您应该指定GROUP BY
子句,但您也可以只切换本地数据库的ONLY_FULL_GROUP_BY设置。