问题
which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
解决方法
临时解决
执行一段SQL语句
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:
show variables like ‘%sql_mode’;
- 编辑 my.cnf 文件
文件地址一般在:/etc/my.cnf,/etc/mysql/my.cnf
使用 vim 命令编辑文件
找到 sql_mode 的位置,去掉 ONLY_FULL_GROUP_BY
然后重启 MySQL;
有的 my.cnf 中可能没有 sql-mode,需要追加:
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] 下面,如加入到其他地方,重启后也不生效,具体的如下图:
- 修改成功后重启 MySQL 服务
service mysql restart
重启好后,再登录 mysql,输入 SQL:show variables like ‘%sql_mode’; 如果没有 ONLY_FULL_GROUP_BY,就说明已经成功了。
如果还不行,那么只保留 STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION 即可
追加内容为:
sql-mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
Windows
- 修改配置文件
[mysqld] 下面加入以下内容
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
- 打开【任务管理】-【服务】,找到 MySQL 服务,右键重启服务
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 ```