[MySQL报错1055]解决方案详解


相信大家在使用MySQL数据库的过程中,或多或少都遇到报错。在mysql版本更新到5.7之后,有一个新的报错出现的次数越来越频繁,它就是MySQL 1055 报错。

本文就给大家介绍一下MySQL 1055报错的原因以及解决的思路,并给出两种具体的解决方案供大家参考。

一、问题描述:

在MySQL数据库查询下,实行SQL插入语句报错。错误提示以下:

>1055-Expression#1ofSELECTlistisnotinGROUPBYclauseandcontainsnonaggregatedcolumn

二、报错原因:

在MySQL 5.7以后,sql_mode中默认设置中有ONLY_FULL_GROUP_BY,SQL句子未通过ONLY_FULL_GROUP_BY词义查验,因此导致了报错。

ONLY_FULL_GROUP_BY规定select句子中查询出的列必须是确立的(其他语句也是如此)。

三、解决报错的思路:

对于这个报错,有二种解决的思路:第一种便是把这类限制除掉,让我们的SQL语句像5.7版本之前的那样能跑。第二种就是修改sql:依照规定要求的标准重新写整个项目中全部会报错的sql。很明显的是,第二种方法会带来很大的复杂度,而且万一某个SQL语句改写不到位,会继续报错,所以这种方案也具有一定的风险。

因此,我们最好能选择第一种方式,试试看能否将此类限制去掉,一劳永逸。而对于如何去掉这个限制,本文提供了两种方案。

四、解决方案:

1.永久解决

1)在MySQL下执行语句SELECT @@sql_mode

2)将查寻結果中的ONLY_FULL_GROUP_BY除掉随后拷贝,找到MySQL的配置文件并打开,将sql_mode的值设定为拷贝的值

(若沒有sql_mode在[mysqld]正下方加上一行就可以)。

MySQL配置文件所在位置:安装版可根据windows服务相匹配的mysql开机启动项,查询其相匹配的属性->exe文件的路径,获得my.ini文件的路径。

免安装版一般在其根目录下。(默认文件名是my-default.ini,务必将其改成my.ini才可以起效)。

3)再次开启MySQL服务即可生效

2.暂时关掉ONLY_FULL_GROUP_BY

1)首先,利用用管理员身份运行cmd,进到到mysql的安装路径下的bin文件目录,用管理员账号登录mysql数据库。

2)随后输入命令mysql –h localhost –uroot –p在其中-h是特定IP地址或IP地址,-u是特定客户,-p是指用登录密码。

3)然后输入命令select @@global.sql_mode;能够查询全局sql_mode的值。请注意:这里的“;”是不可以省去的。

4)再键入 set @@global.sql_mode = (select replace(@@global.sql_mode,‘ONLY_FULL_GROUP_BY’,’’));执行后就可以修改@@global.sql_mode。

5)最后再次连接一下数据库,执行语句,就不会报错了。但是注意:这种方法是一次性的,只能解决一次,如果重启数据库,它又会再次报错的。

以上就是对于MySQL 1055报错的总结和解决的方案,希望看完本文的你可以对这类错误有一个比较完整的理解,之后遇到此类问题可以更好的解决它。


评论区(0)

评论