sql_mode=only_full_group_by修改

解决Linux MySQL错误
本文解决在将数据库从Windows迁移到Linux后出现的MySQL错误。通过修改或添加sql_mode参数到/etc/mysql/mysql.conf.d/mysqld.cnf或/etc/my.cnf文件中,可以避免特定的运行时错误。

这里写图片描述
数据库由window的换成了linux就出现了上图中的错误,经百度查的解决办法为:
在/etc/mysql/mysql.conf.d/mysqld.cnf (Ubuntu系统中)文件中修改

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,添加上就行。
或者是在/etc/my.cnf文件中进行修改或添加(本人的是在该文件下进行操作的,因为没有mysqld.cnf,系统不同的原因吧)。

### 修改 Linux 环境下的 MySQL `sql_mode` 设置 在 Linux 中调整 MySQLSQL 模式可以通过编辑配置文件来实现。对于不同的 MySQL 版本,配置文件的位置可能会有所不同。 #### 查找并编辑 MySQL 配置文件 通常情况下,MySQL 的主要配置文件位于 `/etc/my.cnf` 或者 `/etc/mysql/my.cnf` 文件中[^1]。某些发行版也可能使用其他位置如 `/usr/local/mysql/etc/my.cnf` 或者特定于实例的配置文件。 为了禁用或自定义 `ONLY_FULL_GROUP_BY` 行为,可以在 `[mysqld]` 节点下找到现有的 `sql_mode` 参数,并对其进行修改: ```ini [mysqld] sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION ``` 如果希望保留除 `ONLY_FULL_GROUP_BY` 外的所有默认模式,则可以先查看当前有效的 SQL 模式列表,再从中移除不需要的部分[^3]。 #### 应用更改后的配置 完成上述操作之后,保存文件并对 MySQL 服务重启以使改动生效: ```bash sudo systemctl restart mysqld.service ``` 或者根据具体环境使用相应的命令启动/停止 MySQL 服务器进程。 #### 动态设置 `sql_mode` 除了通过配置文件静态设定外,还可以直接登录到 MySQL 客户端执行以下命令临时改变 session 或 global 层面的 `sql_mode` 值: ```sql SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); -- OR FOR SESSION LEVEL CHANGES USE: SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); ``` 这允许在不触及全局配置的前提下测试去除该选项的效果[^4]。 #### 注意事项 当关闭 `ONLY_FULL_GROUP_BY` 后虽然解决了现有查询兼容性问题,但也意味着放弃了对非确定性结果集的安全保障机制。因此建议开发者尽可能遵循标准语法编写 SQL 查询语句,确保每条 SELECT 子句中的列要么出现在 GROUP BY 列表里,要么被包含在一个聚合函数内[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值