我意外启用了ONLY_FUL_GROUP_BY模式,如下所示:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
如何禁用它?
我意外启用了ONLY_FUL_GROUP_BY模式,如下所示:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
如何禁用它?
当前回答
更新:
要保持当前mysql设置并禁用ONLY_FUL_GROUP_BY,我建议访问phpmyadmin或您正在使用的任何客户端并键入:
SELECT REPLACE(@@sql_mode,'ONLY_FUL_GROUP_BY','')copy_me
下一个将结果复制到my.ini文件。
薄荷:sudo nano/etc/mysql/my.cnf
ubuntu 16及以上:sudo nano/etc/mysql/my.cnf
ubuntu 14-16:/etc/mysql/mysql.conf.d/mysqld.cnf
小心copy_me结果可以包含一个长文本,默认情况下可以对其进行修剪。确保复制整个文本!
旧答案:
如果要永久禁用错误“SELECT列表的表达式#N不在GROUP BY子句中,并且包含非聚合列“db.table.COL”,该列在功能上不依赖GROUP BY子句的列;这与sql_mode=only_full_GROUP_BY不兼容”,请执行以下步骤:
sudo nano/etc/mysql/my.cnf将此添加到文件末尾[mysqld]sql_mode=“STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSITION”sudo服务mysql重启以重启mysql
这将为所有用户禁用ONLY_FUL_GROUP_BY
其他回答
对于Mac OS Mojave(10.14)开放终端
$ sudo mkdir /usr/local/mysql-5.7.24-macos10.14-x86_64/etc
$ cd /usr/local/mysql-5.7.24-macos10.14-x86_64/etc
$ sudo nano my.cnf
粘贴以下内容:
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
保存和退出nano的快捷键:Ctrl+x和y,然后Enter
注意:您可能需要在这些命令中更新mysql-5.7.224-macos10.14-x86_64,只需检查在/usr/local中获得的正确文件夹名称/
希望它能帮助到某人!
以防其他人和我面临同样的问题。在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`
这对我有用:
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
如果您正在使用WAMP。左键单击WAMP图标,然后转到MySQL->MySQL设置->sql模式然后选择sql模式->用户模式
在MySQL 5.7和Ubuntu 16.04上,编辑文件MySQL.cnf。
$ sudo nano /etc/mysql/conf.d/mysql.cnf
包括如下所示的sql_mode并保存文件。
[mysql]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
注意,在我的例子中,我删除了模式STRICT_TRANS_TABLES和ONLY_FUL_GROUP_BY。
这样做,它将永久保存模式配置。如果您只是通过MySQL更新@@sql_mode,则会有所不同,因为它会在机器/服务重新启动时重置。
之后,要使修改后的配置生效,请重新启动mysql服务:
$ sudo service mysql restart
尝试访问mysql:
$ mysql -u user_name -p
如果您能够登录并访问MySQL控制台,那就好了。太好了!
但是,如果像我一样,您会遇到错误“未知变量sql_mode”,这表明sql_mode是mysqld的一个选项,那么您必须返回,再次编辑文件mysql.cnf并将[mysql]更改为[mysqld]。重新启动MySQL服务并进行最后一次测试,尝试登录MySQL控制台。给你!