mysql遇到的小问题1055报错解决方法
ドラゴンボールのLong Lv4

MySQL发生[Err] 1055的解决方案

在mysql库中进行insert into,执行结束后,总是会跳出报错

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_b

第一次遇到这样的错误,貌似是由于MySQL的版本问题,发现自己用的是MySQL 8版本

此时有两种解决方案

方案一:临时修改(服务器重启后会失效)

1
2
-- 通过该语句查询这个值 --
select @@sql_mode;

会得到如下结果:

1
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

再执行下述语句,引号里的内容是上述结果剔除ONLY_FULL_GROUP_BY后余下的内容

1
set @@sql_mode= "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

方案二:修改mysql配置文件(服务器重启后生效)

在my.cnf文件中的[mysqld]的下面加上下列语句

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

一般不建议将ONLY_FULL_GROUP_BY关闭,因为这个符合SQL标准,也可以使用MySQL中的一个函数 any_value(field),括号中是一个字段,可以使得括号中的字段既能被查询出来又可以不出现在group by语句中

docker中配置调整

如果你用的是docker容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#查询出mysql的容器名称
docker ps

#进入docker环境,下面的mysql1是我的容器名称
docker exec -it mysql1 /bin/bash

#查看配置文件
cat /etc/mysql/my.cnf

#如果要修改,先安装下vim编辑器
apt-get update
apt-get install vim

#修改mysql配置文件
vim /etc/mysql/my.cnf

#在mysqld最下面加入
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
  • 本文标题:mysql遇到的小问题1055报错解决方法
  • 本文作者:ドラゴンボールのLong
  • 创建时间:2020-06-06 20:10:12
  • 本文链接:https://zhongshenglong.xyz/2020/06/06/mysql遇到的小问题1055报错解决方法/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论