当前位置: 代码网 > it编程>数据库>Mysql > mysql ONLY_FULL_GROUP_BY设置sql_mode无效排查问题(windows)

mysql ONLY_FULL_GROUP_BY设置sql_mode无效排查问题(windows)

2024年09月06日 Mysql 我要评论
mysql only_full_group_by设置sql_mode无效排查低版本的mysql环境中的sql在mysql8中报错出现this is incompatible with sql_mode

mysql only_full_group_by设置sql_mode无效排查

低版本的mysql环境中的sql在mysql8中报错出现

this is incompatible with sql_mode=only_full_group_by

由于开启了only_full_group_by的设置,如果select 的字段不在 group by 中,
并且select 的字段未使用聚合函数(sum,avg,max,min等)的话,那么这条sql查询是被mysql认为非法需。

要对mysql8中sql_mode进行设置。

1.查询sqlmode

select @@global.sql_mode;

2.临时修改sql-mode执行sql

set global sql_mode = 'strict_trans_tables,no_zero_in_date,no_zero_date,error_for_division_by_zero,no_engine_substitution'; 

注:

此办法全局生效,如果以创建的表空间依旧无效,需要切换到对应的表空间,再次执行修改sql-mode

use database_name;
set global sql_mode = 'strict_trans_tables,no_zero_in_date,no_zero_date,error_for_division_by_zero,no_engine_substitution'; 

以上执行后请执行刷新​​​​​​

flush privileges;

3.永久修改sql-mode

用记事本直接打开my.ini文件,在文件中增加以下配置,再重启mysql服务。

# set the sql mode to strict
# sql-mode="strict_trans_tables,no_engine_substitution"
sql-mode="strict_trans_tables,no_zero_in_date,no_zero_date,error_for_division_by_zero,no_engine_substitution"

注1:

  • 如果使用记事本编辑保存后,可能会启动失败,需要检查文件编码格式,
  • 记事本默认编码格式utf-8,my.ini文件需要ansi格式,建议直接另存为覆盖文件。

注2:

  • 按上述办法修改my.ini文件后重启mysql发现依旧无效,此时需检测mysql读取的my.ini路径是否正确。
  • 执行下方sql,查询读取my.ini路径。
  • 如果发现此路径下没有my.ini文件需要手动新建一个my.ini文件。
show variables like 'datadir';

总结

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com