让建站和SEO变得简单

让不懂建站的用户快速建站,让会建站的提高建站效率!

应用场景

应用场景

纪录MySQL报错1055:ONLY_FULL_GROUP_BY方式下的GROUP BY处置步调

2024-12-08

昨天在数据迁徙的历程中,后台接口函数无法链,因为要模拟腹地局域网,不成使用外网,是以web环境齐是腹地U盘下载的装置包,通盘环境装置完成后开动样貌发现后台无法检察数据,SQL语句会报错:“1055

- Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated”,之前碰到过近似的作假,然而莫得去纪录,导致问题再刻下又是度娘结局额的,是以长个记性纪录下,但其实它的原因并不复杂。

这个作假的产生,主若是因为在MySQL数据库版块为5.7及以上时,默许开启了ONLY_FULL_GROUP_BY SQL方式。在这个方式下,关于GROUP BY操作有严格的条件:SELECT语句中的查询列,如果不在GROUP BY子句中出现,那么这个查询即是违纪的。这是因为,非团聚列在GROUP BY操作中莫得明确的值,是以MySQL无法详情若何对这些列进行分组。

为了处置这个问题,咱们不错罗致以下两种步调:

第一种步调

在MySQL的树立文献中进行设立。关于Linux系统,咱们需要裁剪【/etc/my.cnf】文献,在[mysqld]树立中添加或修改sql_mode字段。

关于Windows系统,咱们需要裁剪MySQL装置目次下的【my.ini】文献,一样在[mysqld]树立中添加或修改sql_mode字段。

BASIC

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

在添加或修改完sql_mode字段后,如图:

咱们需要保存文献并重启MySQL做事,以使设立奏效。

第二种步调

在Navicat中,输入下列SQL语句进行查询:

BASIC

SELECT &GLOBAL.sql_mode;

查询效果如下,近似如下:

BASIC

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

通过上头的查询效果,不错看到 开启了 ONLY_FULL_GROUP_BY 方式,这里第一种处置决策即是,去除 ONLY_FULL_GROUP_BY,从头设立值。

呐喊如下:www.actoken.cn

BASIC

set &global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

实行完上头的SQL语句之后,再次实行报错的SQL语句,发现不错通常开动了。

另外树下,修改之后一定一定需要重启mysql时间使其奏效。好了,修改完成样貌开动一切通常,有问题留言响应,关于不属于sql域名的径直在文献里添加然后重启mysql就行,否则出错就不好弄了,还要牢记备份啊!

返回

Powered by 物联网资讯网 RSS地图 HTML地图

Copyright Powered by站群 © 2013-2024