2021-07-16


mysql 排序问题)

问题产生原因:数据库设置了only_full_group_by模式 版本5.7以后语法严谨

假设查询语句是下面这样:
下面展示一些 内联代码片

 select 
	id,name,sex
from t_person
group by create_time
order by age

需要把create_time、age,放到select的字段里,因为名字可能对应多个,所以需要加上any_value,修改后的结果如下

select 
	id,any_value(name),sex,create_time,age
from t_person
group by create_time
order by age

2. 关闭ONLY_FULL_GROUP_BY模式。关于这个模式,是mysql提供的安全检查。 直接设置为一个新值就完事了:

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';

如果通过这种方法设置,重启mysql似乎就会失效

3. 通过更改my.cnf实现。本质上和2是一样的,都是关闭ONLY_FULL_GROUP_BY模式。我是通过yum安装的mysql,所以直接编辑/etc/my.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';


ystemctl restart mysqld.service


然后就可以了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值