mysql5.7之only_full_group_by

mysql进入5.7版本之后,默认开启sql_mode的only_full_group_by模式。

影响在于:

  sql语句中如果有group by部分,那么select部分不能出现group by框定的字段以外的字段(聚合函数除外)

举个例子:

  select count(*),ORG_NAME,ORG_CODE from PUB_ORGAN group by ORG_CODE

  这个sql在5.7严格模式下就会执行报错,因为ORG_NAME不在group by字段中包含

报错情况:

1.ERROR 1055 (42000): Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'ORG_NAME' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

问题根源:

1-- 使用navicate执行sql语句 2SELECT @@sql_mode; 3 4-- 返回内容 5-- 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

修改方案:

(1)全局修改

1#查找mysql初始化文件my.cnf 2ps -ef | grep mysql 3#找到mysqld脚本运行参数defaults-file,这里假设是:--defaults-file=/apps/my.cnf修改文件内容搜索sql_mode把ONLY_FULL_GROUP_BY删除、保存、重启mysql

(2)线上修改

1-- 管理员登录 2-- 查询当前上下文 3SELECT @@GLOBAL.sql_mode; 4-- 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 5 6-- 修改当前上下文 7set 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 ';

参照网址:

  https://blog.csdn.net/wangyunfeis/article/details/77911704

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

sql注入

反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o

SpringBoot自定义序列化的使用方式

场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x

mysql 命令集

sql\_mode定义了mysql应该支持的sql语法,数据校验等select@@sql_mode;属性说明ONLY\_FULL\_GROUP\_BY对于GROUPBY聚合操作,如果在SELECT中的列,没有在GROUPBY中出现,那么将认为这个SQL是不合法的,因为列不在GROUPBY从句中STRICT\_

mysql设置时区

mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0

mysql5.7之only_full_group_by - HelloWorld