我们刚刚将Mysql数据库从5.6升级到5.7.21。 然后,针对sql_mode:only_full_group_by编写的所有sql语句均出错。这是Mysql 5.7.21的正常行为,因为my.ini中的sql_mode参数设置为“ ONLY_FULL_GROUP_BY”。 然后,在my.ini中将此参数设置为空字符串(“”),然后再次重新启动服务器。在短短的1或2分钟内,一切似乎都很正常,然后相同的查询又再次出现only_full_group_by错误。 我们仍在设法找到一种解决方案,而不用碰碰我们的代码库。
您可以在此链接中看到一个生动的范例 请刷新页面10次或更多次以使页面正常工作。
http://www.karoltekstil.com.tr/atlet-ust-giyim/k/10-42?page=1
答案 0 :(得分:0)
每个MySQL会话(数据库连接)都有自己的sql_mode
设置。
启动新会话(与数据库建立新连接)后,sql_mode
session 变量将继承 global {{ 1}}设置。
会话正在运行时,它可以更改自己的sql_mode
的设置,例如通过发出如下语句:
sql_mode
SET @@session.sql_mode = 'ONLY_FULL_GROUP_BY' ;
的新值对该会话保持有效,直到再次更改它或会话结束为止。
具有足够特权的用户还可以使用以下语句更改sql_mode
的 global 设置,例如:
sql_mode
所做的任何更改使全局设置仅影响新的会话(应用更改后启动的连接。)对全局设置的更改不影响已启动的会话。现有会话已经具有其SET @@global.sql_mode = 'ONLY_FULL_GROUP_BY' ;
的“副本”,该副本是在启动连接时继承的。
请注意,sql_mode
可以在ONLY_FULL_GROUP_BY
中显式,也可以隐式包含在组合设置中。例如,sql_mode
包括sql_mode='ANSI'
。
MySQL启动程序具有多种位置,可以从其中读取配置信息,无论是ONLY_FULL_GROUP_BY
,my.ini
还是启动命令行中提供的选项。
调试的下一步是确定启动数据库时my.cnf
的设置是否正确,然后确定在个别会话中是否正在执行更改sql_mode设置的语句。
应用程序在搅动数据库连接,启动和结束离散会话吗?
还是应用程序使用连接池,从该池借用并返回的持久连接?</ p>