万维当云伯乐 CDN华纳云
其他技术2024-01-02965 阅读

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

本文摘要最近在倒腾魔方系统的V10业务管理系统,在本地开发的时候迁移线上的数据库到本地发现了一些报错 如何修复 SQLSTATE[42000]:语法错误或访问冲突:1055? 问题: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of
丽萨主机
AD:
【广告招商】文章正文文字广告位开放合作
最近在倒腾魔方系统的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 服务以使更改生效。
广告招商文章内容详情页下 · 优质席位开放中合作咨询