phpstudy如何修改Mysql 的 ONLY_FULL_GROUP_BY?

+ -
0
phpstudy如何修改Mysql 的 ONLY_FULL_GROUP_BY?

前言
在本地环境测试deepsound v1.3 时,出现了”发现”页面空白的情况,在Linux上使用正常,因为是一样的代码,于是从环境方面逐个排查,最后终于找出了问题所在。

在浏览官方的评论区,reishi找到了作者的一段回复,
1) Please disable only_full_group_by mode in your database then check again.


于是在本地环境的PHPstudy里修改了一下MySQL的配置。
找到你的MySQL目录,找到配置文件
比如我的是
D:\home\Extensions\MySQL5.7.26\my.ini
打开编辑,
在[client]上方输入下面的代码,保存。
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服务就好了。

总结一下是因为MySQL本地环境是5.7版本,而Linux下是5.6版本的问题。
就是在group by的时候的出错了,而且提到了一个ONLY_FULL_GROUP_BY的sqlmode,就是它导致了sql报错,查阅资料后发现,这个是mysql5.7提供的新特性。。。
ONLY_FULL_GROUP_BY是MySQL提供的一个sql_mode,通过这个sql_mode来提供SQL语句GROUP BY合法性的检查,在MySQL的sql_mode是非ONLY_FULL_GROUP_BY语义时。一条select语句,MySQL允许target list中输出的表达式是除聚集函数或group by column以外的表达式,这个表达式的值可能在经过group by操作后变成undefined,而对于语义限制都比较严谨的多家数据库,如SQLServer、Oracle、PostgreSql都不支持select target list中出现语义不明确的列,这样的语句在这些数据库中是会被报错的,所以从MySQL 5.7版本开始修正了这个语义,就是我们所说的ONLY_FULL_GROUP_BY语义。
信息
想要留言? 请 登录 您的账号。还没有? 你可以 免费创建账号

Comments 0