最近在倒腾魔方系统的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 服务以使更改生效。