开发者

解决MySql版本问题sql_mode=only_full_group_by

开发者 https://www.devze.com 2022-12-12 12:06 出处:网络 作者: XiaoMaPro
目录mysql版本问题sql_mode=only_full_group_byWindowssql_mode=only_full_group_by以及多种解决方案出错的sql情况解决方案1解决方案2MySql版本问题sql_mode=only_full_group_by
目录
  • mysql版本问题sql_mode=only_full_group_by
    • Windows
  • sql_mode=only_full_group_by以及多种解决方案
    • 出错的sql情况
    • 解决方案1
    • 解决方案2

MySql版本问题sql_mode=only_full_group_by

查看sql_mode

select @@sql_mode

查询出来的值为:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,rrHWnYdXERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

在查出结果中可以看到里面包含了ONLY_FULL_GROUP_BY,因此我们要讲ONLY_FULL_GROUP_BY从中去掉,重js新设置值。

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,对于新建的数据库有效。对于已存在的数据库,则需要在对应的数据下执行

set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATEphp_USER,NO_ENGINE_SUBSTITUTION';php

修改配置文件去除ONLY_FULL_GROUP_BY这种方式是我个人比较喜欢的.

打开配置文件mysql.cnf

sudo vi /etc/mysql/mysql.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'

重启mysrrH开发者_NewSQLWnYdXql

sudo service mysql restart

进入mysql查看:

SELECT @@sql_mode;

Windows

在Windows修改mysql安装目录下面配置未见 my.ini,在文件中添加

[mysqld]
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=only_full_group_by以及多种解决方案

出错的sql情况

// mysql
SELECT
 *
FROM
 table t
GROUP BY
 t.mobile_no

提示出错:*** which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

原因:

mysql 5.7版本以上sql_mode新加入了only_full_group_by

解决方案1

修改sql_mode(容易被怼,因为大多都是在修改全局的sql_mode)

查看:

select @@sql_mode;

修改:

set @@sql_mode ='';

解决方案2

函数 any_value()

(使用方案一,原本应该是错的sql语句依然执行成功,但有时特殊情况,需要在select 下查询除group以外的值)

SELECT
 any_value(t.id),
 t.mobile_no
FROM
 table t
GROUP BY
 t.mobile_no

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号