首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置全局sql_mode=(选择替换(@@sql_mode,‘@@sql_mode_FULL_GROUP’,‘,’‘);不工作

设置全局sql_mode=(选择替换(@@sql_mode,‘@@sql_mode_FULL_GROUP’,‘,’‘);不工作
EN

Database Administration用户
提问于 2023-01-26 16:53:22
回答 1查看 752关注 0票数 0

我多次在我的localhost上运行了以下sql语句:

代码语言:javascript
复制
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

根据这一员额:

仅禁用_完整_组_通过

取得的成果:

代码语言:javascript
复制
10:58:22    SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'only_full_group_by',''))    0 row(s) affected   0.00026 sec

不更新任何记录。

我继续遇到:

代码语言:javascript
复制
[42000][1055] Expression #9 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'table.column' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

在Workbench中检查服务器变量显示没有变化:

在执行了一些操作之后,我重新启动了MySQL服务--如果当前会话或当前会话重置,这没有任何区别。

那么,如何只更新此设置?

MySQL v5.7.34

遵循Akina的建议并执行:

代码语言:javascript
复制
select @@sql_mode mode_before_replacing;
SET @@sql_mode = REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', '');
select @@sql_mode mode_after_replacing;

响应:

代码语言:javascript
复制
09:50:15    select @@sql_mode mode_before_replacing LIMIT 0, 50000  1 row(s) returned   0.00025 sec / 0.000032 sec

09:50:15    SET @@sql_mode = REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', '')  0 row(s) affected   0.00024 sec

09:50:15    select @@sql_mode mode_after_replacing LIMIT 0, 50000   1 row(s) returned   0.00012 sec / 0.000010 sec

错误仍然存在。

EN

回答 1

Database Administration用户

发布于 2023-01-27 17:17:29

使用SET全局时,它不会更改当前会话的变量。当您连接时,会话变量是从全局变量中复制的,而且在大多数情况下,它们不会注意之后对全局变量的更改(除了少数例外,例如read_only)。

重新启动MySQL服务器时,会重置对全局变量所做的任何自定义更改。全局变量来自持久化选项文件(通常是my.cnf)。

因此,有三种可能的解决方案:

代码语言:javascript
复制
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

这将设置当前会话变量,而不是全局变量。然后你就可以测试。更改将只影响当前会话,当该会话断开时,设置将与其一起进行。

代码语言:javascript
复制
SET GLOBAL sql_mode=...

然后重新连接,开始一个新的会话。它将复制全局变量的新值。

代码语言:javascript
复制
SET PERSIST sql_mode=...

这是MySQL 8.0中的一个新特性,因此您必须进行升级。它的作用类似于SET全局(即不更改当前会话),但它保存了文件中的值,因此如果您重新启动MySQL服务器,它仍然记得您更改了它。详细信息请阅读https://dev.mysql.com/doc/refman/8.0/en/persisted-system-variables.html

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/322631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档