问题

  1. which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

解决方法


临时解决

执行一段SQL语句

  1. SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

如果mysql服务重启,就会失效,如果需要长期有效,按照下面的操作即可。

Linux


1. 登录进入 MySQL
使用命令 mysql -u username -p 进行登陆,然后输入密码,输入 SQL:

  1. show variables like ‘%sql_mode’;

image.png

  1. 编辑 my.cnf 文件

文件地址一般在:/etc/my.cnf,/etc/mysql/my.cnf
使用 vim 命令编辑文件
找到 sql_mode 的位置,去掉 ONLY_FULL_GROUP_BY
然后重启 MySQL;
有的 my.cnf 中可能没有 sql-mode,需要追加:

  1. sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

注意要加入到 [mysqld] 下面,如加入到其他地方,重启后也不生效,具体的如下图:

image.png

  1. 修改成功后重启 MySQL 服务
  1. service mysql restart

重启好后,再登录 mysql,输入 SQL:show variables like ‘%sql_mode’; 如果没有 ONLY_FULL_GROUP_BY,就说明已经成功了。

image.png

如果还不行,那么只保留 STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION 即可
追加内容为:

  1. sql-mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

Windows

  1. 修改配置文件

image.png

[mysqld] 下面加入以下内容

  1. [mysqld]
  2. sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
  1. 打开【任务管理】-【服务】,找到 MySQL 服务,右键重启服务

image.png

  1. 配置文件参考如下 ```sql [mysql]

    设置mysql客户端默认字符集

    default-character-set=utf8

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

[mysqld]

设置3306端口

port = 3306

设置mysql的安装目录

basedir=E:\mysql

设置mysql数据库的数据的存放目录

datadir=E:\mysql\data

允许最大连接数

max_connections=200

服务端使用的字符集默认为8比特编码的latin1字符集

character-set-server=utf8

创建新表时将使用的默认存储引擎

default-storage-engine=INNODB

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

参考

https://blog.csdn.net/u012660464/article/details/113977173

https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html