一个ip地址上可以做几个网站,安徽php网站建设,做网页公司有哪些,谷歌google play官网下载一、前言
最近老项目换新数据库#xff08;都是mysql#xff09;#xff0c;有些在老数据库可以执行的sql#xff0c;在新数据库执行就会报错sql_modeonly_full_group_by
意思是说数据库的模式是sql_modeonly_full_group_by#xff0c;group by的字段必须和查询字段一致…一、前言
最近老项目换新数据库都是mysql有些在老数据库可以执行的sql在新数据库执行就会报错sql_modeonly_full_group_by
意思是说数据库的模式是sql_modeonly_full_group_bygroup by的字段必须和查询字段一致才行否则不让执行例如
但是这样不太能符合原本需要的功能而且老项目有很多这样的不标准语句都改不现实。
二、解决方法
修改数据库配置。搜到2种方法
1.临时关闭only_full_group_by模式
(1)先查看自己的数据库是怎么配置的
show VARIABLES LIKE 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_SUBSTITUTIO
(2)然后把ONLY_FULL_GROUP_BY去掉再设置下set global sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION;
(3)注意这种方法重启mysql后会失效
2.永久关闭only_full_group_by模式
(1) 找到配置文件/etc/my.cnf(或则关联文件夹找到mysql-server.cnf)
(2) 找到当前配置的sql_mode那行去掉ONLY_FULL_GROUP_BY
如果没有就在文件内的[mysqld]后增加配置
sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
(3)保存配置文件后重启Mysql。
三、备注
本人执行set global sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION;报错了
[Err] 1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation
说明当前用户没有权限需要联系管理员执行才行
改服务器配置也同理如果没有权限联系管理员。
[SQL]SELECT *
FROM bsc_user_t A
group by user_name
limit 100 [Err] 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column otp.A.id which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_full_group_by 解决办法
set global sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 夕阳无限好只是近黄昏