Mysql 5.7.21与EF6和Mysql Connector 6.9.9的only_full_group_by行为不一致

时间:2018-11-29 18:05:50

标签: mysql

我们刚刚将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

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_BYmy.ini还是启动命令行中提供的选项。

调试的下一步是确定启动数据库时my.cnf的设置是否正确,然后确定在个别会话中是否正在执行更改sql_mode设置的语句。

应用程序在搅动数据库连接,启动和结束离散会话吗?

还是应用程序使用连接池,从该池借用并返回的持久连接?<​​/ p>