分析laravel解决mysql only_full_group_by问题

    让我们从下面介绍如何解决Laravel中的mysql only_full_group_by问题。 希望对有需要的朋友有所帮助!

分析laravel解决mysql only_full_group_by问题1.png

分析laravel解决mysql only_full_group_by问题2.png

    解决这个问题也走了不少弯路,按照网上找的方式一个一个试


    解决思路


    查看 sql_mode

分析laravel解决mysql only_full_group_by问题3.png

    首先查看并修改 mysql 配置文件,my.cnf 很尴尬我的这个里面并没有 ONLY_FULL_GROUP_BY

分析laravel解决mysql only_full_group_by问题4.png

    不行,就接着来,想到mysql 有服务端配置,和客户端配置之分,那就增加 [client] 配置

分析laravel解决mysql only_full_group_by问题5.png

    重启mysql ,在MySQL工具查看 sql_mode,确实显示结果和配置的是一样的,但是程序依然报同样的错


    又是一番查找,突然意识到 global session 的问题,也就是文章头部放的两条查询 sql_mode 的语句,就查询一下 是啥区别

    mysql 变量设置方式分两种,

    一种全局配置,也就是 global,作用于全局;

    一种会话配置 session, 只作用于当前连接


    会不会是laravel 在当前连接设置了 sql_mode

    在 laravel 程序打印 sql_mode

分析laravel解决mysql only_full_group_by问题6.png

    找到了原来是程序设置了


    第一想到 mysql 的配置有一个严格模式,我一直是开启状态,设置为 false 问题顺利解决

分析laravel解决mysql only_full_group_by问题7.png

    这样可以解决问题,但本着技术就是要搞清楚到底是咋写的,也并不想直接给他设置为 false,

    在 vendor/laravel/framework/src/ILLuminate/Database 文件夹下搜索 strict ,直接找到核心代码


    文件:vendor/laravel/framework/src/ILLuminate/Database/Connectors/MySqlConnector.php

分析laravel解决mysql only_full_group_by问题8.png

    第一个判断直接判断是否存在 modes 配置,有的话就直接使用这个


    来,搞一下

分析laravel解决mysql only_full_group_by问题9.png

    测试,直接问题搞定


    本着寻根刨底的精神,再接着往下看


    如果 strict = true


    将直接设置程序中写死的 sql_mode, laravel 区分了 mysql 8.0.11 和别的版本

分析laravel解决mysql only_full_group_by问题10.png

    再接着 如果 strict = false ,直接将 sql_mode 设置为NO_ENGINE_SUBSTITUTION

分析laravel解决mysql only_full_group_by问题11.png

    到这里问题就彻底解决了


    最终解决方式

分析laravel解决mysql only_full_group_by问题12.png

    保留了 strict = true,增加 modes 选项,里面的参数是 laravel 底层的配置,只是去掉了 ONLY_FULL_GROUP_BY


    总结:绕了很多弯,花了很多时间。最终问题得以解决,无需修改mysql的任何配置

    上面是有关laravel解决mysql only_full_group_by问题的详细内容,请关注其他相关文章!

对我有帮助
37人认为有帮助

相关帮助