2023-05-10 08:00:02

禁用ONLY_FUL_GROUP_BY

我意外启用了ONLY_FUL_GROUP_BY模式,如下所示:

SET sql_mode = 'ONLY_FULL_GROUP_BY';

如何禁用它?


当前回答

您可以使用配置文件my.cnf禁用它:

$ mysql --verbose --help | grep my.cnf

因此,在macOS 10.12中,它位于usr/local/etc/my.cnf。您可以在此处编辑sql_mode:

# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
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的默认值:SELECT@@sql_mode;通过执行以下查询从控制台中删除ONLY_FUL_GROUP_BY:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FUL_GROUP_BY',''));

还将其从特定数据库中删除

使用数据库名称;

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FUL_GROUP_BY',''));

重新启动web应用服务器访问导致此问题的页面。现在就可以了。

OR

在my.cnf文件中添加以下内容sql_mode=“传统”

注意:如果您正在使用mac my.cnf,可以在/usr/local/etc/my.cnf中找到

或尝试此链接https://dev.mysql.com/doc/refman/8.0/en/option-files.html

重新启动MySQL服务器sudo/usr/local/bin/mysql.server重启或brew服务重新启动mysql

试试看:

SET sql_mode = ''

社区注意:正如下面的答案所指出的,这实际上清除了当前启用的所有SQL模式。这不一定是你想要的。

添加线条

sql-mode=""

在my.ini文件中作为永久修复。

以防其他人和我面临同样的问题。在Ubuntu 16.04上,它唯一对我有效的持久解决方案是:

编辑/lib/systemd/system/mysql.service并将其设置为:

[Unit]
Description=MySQL Community Server
After=network.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
PermissionsStartOnly=true
ExecStartPre=/usr/share/mysql/mysql-systemd-start pre
# Normally, we'd simply use:
# ExecStart=/usr/sbin/mysqld
ExecStart=/usr/sbin/mysqld --sql-mode=ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
ExecStartPost=/usr/share/mysql/mysql-systemd-start post
TimeoutSec=600
Restart=on-failure
RuntimeDirectory=mysqld
RuntimeDirectoryMode=755`

如果您正在使用WAMP。左键单击WAMP图标,然后转到MySQL->MySQL设置->sql模式然后选择sql模式->用户模式