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

2024-01-02 201 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 服务以使更改生效。

    相关文章

    Windows11中文原版镜像系统ISO下载
    国内玩家也可以整上官方chatGPT了,最新支持GPT-4
    高端服务器租用的优势与选择指南
    探索Smart3D服务器显卡的优势与应用
    服务器加了显卡开不起来,原因与解决方法详细解析
    服务器显卡接线图解 – 详细步骤和注意事项

    发布评论