SET @@local.sql_mode= 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';语句写在哪里
时间: 2024-01-19 07:01:53 浏览: 142
这个语句可以写在 MySQL 的命令行终端中或者写在 MySQL 配置文件中。如果写在命令行终端中,可以在登录 MySQL 后直接输入这个语句。如果写在 MySQL 配置文件中,可以找到 my.cnf 或者 my.ini 文件,在 [mysqld] 段落中添加这个语句。具体语法如下:
```
[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
```
这样就可以在 MySQL 启动时默认加载该语句,避免每次登录 MySQL 后都需要手动执行这个语句。
相关问题
linux sql_mode=only_full_group_by
### 修改 Linux 环境下的 MySQL `sql_mode` 设置
在 Linux 中调整 MySQL 的 SQL 模式可以通过编辑配置文件来实现。对于不同的 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]。
Mac ONLY_FULL_GROUP_BY
### 处理 Mac 上 MySQL ONLY_FULL_GROUP_BY 错误
在 Mac 环境下,当遇到 `ONLY_FULL_GROUP_BY` 的错误时,可以通过调整 MySQL 配置文件来解决问题。具体操作涉及编辑 `my.cnf` 文件并移除或修改 SQL 模式的设置。
#### 修改 my.cnf 文件
为了禁用 `ONLY_FULL_GROUP_BY` 设置,在 MySQL 配置文件中找到 `[mysqld]` 下的 `sql_mode` 参数,并将其值更改为不包含 `ONLY_FULL_GROUP_BY`[^1]:
```ini
[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
```
如果找不到该参数,则可以手动添加上述配置到 `/etc/my.cnf`, 或者对于某些安装方式可能是位于 `/usr/local/etc/my.cnf` 中的一个新部分之下[^4]。
完成更改后保存文件并重启 MySQL 服务使新的配置生效。这通常通过命令行工具实现:
```bash
sudo brew services restart mysql
# 或者如果是使用其他方式进行管理的话:
brew services stop mysql && brew services start mysql
```
#### 使用 SQL 命令临时改变 sql_mode
除了永久性的配置变更外,还可以登录数据库并通过执行特定SQL语句暂时性地关闭此选项。进入 MySQL 客户端之后输入以下指令查看当前全局模式设置[^2]:
```sql
SELECT @@GLOBAL.sql_mode;
```
接着可以根据需求更新这些设定以排除掉引起问题的部分[^3]:
```sql
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
```
请注意这种方式仅适用于会话期间有效;一旦服务器重新启动就会恢复默认状态。因此建议还是按照前面提到的方法去持久化改动更为稳妥一些。
#### 注意事项
需要注意的是,虽然取消 `ONLY_FULL_GROUP_BY` 可能解决了现有查询兼容性的问题,但从长远来看遵循标准写法才是更好的实践方向。因为这个特性是为了提高数据一致性和防止潜在逻辑漏洞而引入的安全机制之一[^5]。
阅读全文
相关推荐















