sql_mode=only_full_group_by在哪里修改
时间: 2023-08-25 20:15:11 浏览: 124
要修改sql_mode=only_full_group_by,可以按照以下步骤进行操作:
1. 打开MySQL的配置文件,通常位于/etc/mysql/mysql.conf.d/mysqld.cnf(Linux)或C:\ProgramData\MySQL\MySQL Server x.x\my.ini(Windows)。
2. 在配置文件中找到[mysqld]部分,这是MySQL服务器的主要配置部分。
3. 在[mysqld]部分中添加或修改sql_mode参数,如下所示:
```
[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
```
注意:在上述示例中,已经包含了一些常见的sql_mode选项。你可以根据自己的需要添加或删除其他选项。
4. 保存并关闭配置文件。
5. 重启MySQL服务器,以便使更改生效。在Linux上,可以使用以下命令重启MySQL服务:
```
sudo systemctl restart mysql
```
在Windows上,可以使用服务管理器或命令行来重启MySQL服务。
在完成以上步骤后,sql_mode将被修改为你所指定的值。请注意,在生产环境中修改MySQL的配置文件之前,请务必备份文件以防止意外情况发生。
相关问题
GROUP BY clause; this is incompatible with sql_mode=only_full_group_by, Time: 0.005000s
这个错误是由于MySQL的版本问题和sql_mode设置引起的。在MySQL 5.7.9版本中,引入了only_full_group_by模式,该模式要求在使用GROUP BY子句进行查询时,SELECT列表中的字段必须在GROUP BY子句中出现或者作为聚合函数的参数。如果不满足这个条件,就会报错。
解决这个问题的方法有两种:
1. 将sql_mode设置为非only_full_group_by模式,可以通过修改MySQL的配置文件my.cnf或者在查询之前使用SET语句来修改。具体的设置可以参考MySQL的官方文档。
2. 修改查询语句,将SELECT列表中的字段添加到GROUP BY子句中或者将它们作为聚合函数的参数。
SELECT DISTINCT p.*, u1.id AS directorId, CASE WHEN up1.member_type = 348 THEN u1.nickname ELSE up1.member_name END AS directorName FROM project p LEFT JOIN userproject up1 ON p.p_id=up1.p_id AND up1.director=1 LEFT JOIN sys_user u1 ON up1.member_id = u1.id LEFT JOIN userproject up ON p.p_id=up.p_id LEFT JOIN sys_user u ON up.member_id = u.id LEFT JOIN sys_user_department d ON d.user_id = u.id WHERE (p.enable = ? AND p.audit_status = ? AND p.organization_id = ? AND p.project_name IS NOT NULL) GROUP BY p.project_name,p.project_code,p.project_nature ORDER BY p.p_id DESC报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'spms.p.p_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by怎么处理
这是因为 MySQL 的 sql_mode 设置了 only_full_group_by,导致在 GROUP BY 子句中未包含的列不能在 SELECT 子句中使用。可以尝试以下两种处理方式:
1. 修改 sql_mode
将 MySQL 的 sql_mode 修改为不包含 only_full_group_by 这个选项,可以在 MySQL 配置文件 my.cnf 或者 my.ini 中找到 sql_mode 选项,将其修改为:
```
sql_mode=NO_ENGINE_SUBSTITUTION
```
然后重启 MySQL 服务即可生效。
2. 修改查询语句
在 SELECT 子句中将非聚合列 p.p_id 改为聚合列,例如使用 MAX(p.p_id)。修改后的查询语句如下:
```
SELECT DISTINCT MAX(p.p_id) AS p_id, p.project_name, p.project_code, p.project_nature, u1.id AS directorId, CASE WHEN up1.member_type = 348 THEN u1.nickname ELSE up1.member_name END AS directorName
FROM project p
LEFT JOIN userproject up1 ON p.p_id=up1.p_id AND up1.director=1
LEFT JOIN sys_user u1 ON up1.member_id = u1.id
LEFT JOIN userproject up ON p.p_id=up.p_id
LEFT JOIN sys_user u ON up.member_id = u.id
LEFT JOIN sys_user_department d ON d.user_id = u.id
WHERE (p.enable = ? AND p.audit_status = ? AND p.organization_id = ? AND p.project_name IS NOT NULL)
GROUP BY p.project_name,p.project_code,p.project_nature
ORDER BY p.p_id DESC
```
阅读全文