mysql提示this is incompatible with sql_mode= ONLY_FULL_GROUP_BY 的解决方法


在mysql 5.7版本以上会出现这个问题,因为这个 ONLY_FULL_GROUP_BY 配置严格执行SQL92标准,为了语法兼容不报错,可以修改sql_mode的值。

查看sql_mode的值

mysql> select @@GLOBAL.sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@GLOBAL.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 |
+-------------------------------------------------------------------------------------------------------------------------------------------+

设置减去 ONLY_FULL_GROUP_BY 的两种方式:

  • 方法一:临时会话设置(请注意必须值含引号)
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';
  • 方法二:配置永久设置(值无需引号)
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

文件地址:

Linux: /etc/my.cnf(配置在client节点上)
Windows: \MySQL5.7.26\my.ini(配置在mysqld节点上)

方法一直接生效,方法二需要重启一下mysql服务:

Linux:/bin/systemctl restart mysqld.service
Windows:直接重启wamp或者phpstudy

如果mysql启动不起来,可能设置的sql_mode不对,记得是先select出来后去除:

select @@sql_mode;


版权声明,转载请附上原文链接及本声明: https://blog.yongit.com/note/136752.html