背景
- mysql 版本 8.0.23
- linux 系列的系统,具体操作系统 Debian 9.9 64位
- 由于某个项目的需求,sql 语句用到了 group by ,但是目标列表没有group by 的字段,就会出现这个问题
- 这个问题是因为数据库默认配置sql_mode里面的 ONLY_FULL_GROUP_BY导致的,可在数据库里面通过 select @@GLOBAL.sql_mode; 搜索得出
解决方法1(临时,重启数据库后失效)
-
通过 select @@GLOBAL.sql_mode; 搜索到数据库的默认配置项
-
把配置项里面的 ONLY_FULL_GROUP_BY 拿掉,然后重新写入
set @@GLOBAL.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
解决方法2(永久,重启数据库后依然有效)
-
网上的linux系统的mysql路径的我实在找不到,而且我的是一键安装的mysql
-
文件位置在 /etc/mysql/mysql.conf.d/mysqld.cnf
-
打开该文件然后写入配置
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION -
保存以后 停止mysql :service mysql stop ,然后再启动mysql:service mysql start 就OK了