zoukankan      html  css  js  c++  java
  • Mysql-sql_mode-1064错误

    MySql版本: 5.7
    环境: MacOS, Docker

    错误

    最近在本地Docker的mysql上编写SQL时,使用group by并且使用了第二个字段,报了这个错误

    1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
    

    查看了一下sql_mode

    select @@sql_mode;
    --结果如下
    ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    

    错误探索过程

    Google了一下,发现出现这个问题的同学还挺多(暗自高兴)。。。
    网友的说法是:假如sql_mode指定了only_full_group_by,那么select后面只能存在group by的字段
    MySql官方的说法是:假如sql_mode=only_full_group_by,不可以引用非聚合的字段,假如确实想用,需要使用ANY_VALUE()

    Google上的一些说法

    • 在会话中设置sql_mode,把ONLY_FULL_GROUP_BY剔除,当前会话生效
    set @@sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    

    实际上,当前会话我也不生效

    • 去/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_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    

    实际上,我找不到这个文件
    综上,我推测:网友既然这么说了,他们肯定是成功了的,但是,在哪个配置文件上面加,文件在哪里,可能windows,linux,mac,docker都有点不同。

    最终解决办法

    -- 进入安装mysql的容器
    docker excc -it docker_name /bin/bash
    
    -- 找到几个可能的文件
    find . -name "*.cnf"
    -- 文件列表是
    ./etc/pki/tls/openssl.cnf
    ./etc/my.cnf
    ./var/lib/mysql/auto.cnf
    ./healthcheck.cnf
    
    -- 打开每个文件,看看哪个文件比较有可能。。。TMD只是有可能
    我在my.cnf这个文件,发现了这个session `[mysqld]`,所以大胆地在这个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
    
    -- 退出容器,重启容器
    docker restart container_name
    

    伟岸的我解决这个问题了。。。

  • 相关阅读:
    mysql show profiles 使用分析sql 性能
    面向对象三大特征---封装、继承、多态
    http_build_query用法,挺方便的
    请求数据
    多模匹配算法之Aho-Corasick
    php命名空间如何引入一个变量类名?
    MySQL错误:Can't connect to MySQL server (10060)
    Vim完全教程
    路由
    wireshark
  • 原文地址:https://www.cnblogs.com/suimeng/p/mysql-sql_mode_only_full_group_by.html
Copyright © 2011-2022 走看看