说明情况: 首先我是在Linux服务器上新装了一个mysql , 原先版本为5.7.22 , 现在不小心装成了5.7.16 , 项目启动是时候跳转首页不显示数据 , 后台开始报错 :
如下 , 具体错误bug忘了复制截图 , 只保留了标题和下面这两行百度的内容 , 属于bug原因
Expression #1 of ORDER BY clause is not in SELECT list, references column 'advplatform.t1.order_num' which is not in SELECT list; this is incompatible with DISTINCT
原因是 5.7.5之后版本默认启用了only_full_group_by SQL模式,所以MySQL会不识别选择列表、条件或顺序列表引用的查询 ,
以下是自己解决问题的步骤:
1. 打开xshell , 连接上对应的Linux服务器 , 可直接在根目录中输入 mysql -uroot -p123456 注: (root 是mysql服务的账号 , -p后面的123456是mysql的密码 , 两者视个人配置更改 , - 前需要空格 u 和 p 连接的账号密码不需要空格: )
2. 输入SHOW SESSION VARIABLES; 命令行 , 我自己试了下小写 , 不知道为什么不行 , 还是老实的大写了 , 回车后会弹出很多的数据 , 你从中找到 sql_mode
如果 其中存在ONLY_FULL_GROUP_BY; 的话 , 就要修改这个属性的内容 , 具体为什么请恕在下不知道了 , 修改的时候输入
set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; ( 不知道为什么 , 那个set 单词和session 离的很远 , 小伙伴们复制小心)
运行成功后再像刚刚那样查询一下看看属性是否改变 , 如改变成自己set的内容即算成功 ;
3. 还有一个属性要修改 SHOW GLOBAL VARIABLES; 其操作步骤与 2 丝毫不差 , 可照搬操作
set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
确认修改完成后 , 重启项目 , 可以运行 , bug 消失 ;
最后 , 喜大普奔 , 撒花花 .......
修改 bug 过程参照的大神贴, 大家围观 https://blog.csdn.net/fansili/article/details/78664267