解决MySQL错误:this is incompatible with sql_mode=only_full_group_by 的过程

2024-01-02 255 0

最近在倒腾魔方系统的V10业务管理系统,在本地开发的时候迁移线上的数据库到本地发现了一些报错

如何修复 SQLSTATE[42000]:语法错误或访问冲突:1055?

问题:

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column

原因:

根据 MySQL 文档2 ,在 SQL 模式下使用唯一的完整 group by 模式将拒绝选择列表、HAVING 条件或 ORDER BY 列表引用既未在 GROUP BY 子句中命名也不在功能上相关的非聚合列的查询在 GROUP BY 列上。

解决方案:

我们可以在查询中进行所需的更改来解决 SQL 模式。在我们的例子中,我们使用第二个选项绕过了错误。

运行以下MySQL命令以root用户登录MySQL并查看现有值

sudo mysql -u root -p 
mysql> SELECT @@global.sql_mode;

保留现有值的备份,以确保我们能够在需要时恢复更改。现在运行以下命令进行所需的更改。

mysql> SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

另一种可能的解决方案是直接在 my.cnf 文件上进行更改。您可以使用以下命令找到 my.cnf 文件。在我们的例子中,我们采用了第二个选项,将条目添加到“my.cnf”文件中。

find / -name my.cnf

在我们的例子中,路径是“ /etc/mysql/my.cnf ”。现在修改 my.cnf 文件以在 mysqld 块中添加所需的 sql_mode。例如,

[mysqld]

sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

重新启动 MySQL 服务以使更改生效。

    相关文章

    Nginx 跨域配置详细讲解
    phpstorm 20个快捷键大全
    代码版本管理工具Git常用命令操作
    Nginx技巧:使用fastcgi_buffering进行缓冲控制
    Nginx技巧:设置if指令进行条件配置
    Nginx技巧:配置gzip types设置与gzip_types

    发布评论