2023-05-10 08:00:02

禁用ONLY_FUL_GROUP_BY

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

SET sql_mode = 'ONLY_FULL_GROUP_BY';

如何禁用它?


当前回答

MySQL文档还指定了以下方法:

在选项文件(如my.cnf(Unix操作系统)或my.ini(Windows))中设置sql mode=“<mode>”。要通过命令行在服务器启动时设置SQL模式,请使用--SQL mode=“<modes>”选项。

*其中<modes>是用逗号分隔的不同模式列表。

要显式清除SQL模式,请在命令行上使用--sqlmode=“”或在选项文件中使用sqlmode=”将其设置为空字符串。

我在/etc/my.cnf中添加了sqlmode=“”选项,并成功了。

这个SO解决方案讨论了找出MySQL正在使用哪个my.cnf文件的方法。

进行更改后不要忘记重新启动MySQL。

其他回答

解决方案1:从mysql控制台中删除ONLY_FUL_GROUP_BY

mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

你可以在这里阅读更多

解决方案2:从phpmyadmin中删除ONLY_FUL_GROUP_BY

打开phpmyadmin并选择localhost单击菜单变量并向下滚动以进入sql模式单击编辑按钮更改值并删除ONLY_FUL_GROUP_BY并单击保存。

这是Ubuntu 14+上MySql 5.7+的永久解决方案:

$ sudo bash -c "echo -e \"\nsql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\"  >> /etc/mysql/mysql.conf.d/mysqld.cnf"
$ sudo service mysql restart
# Check if login attempt throws any errors
$ mysql -u[user] -p # replace [user] with your own user name

如果您能够登录而不出错,那么现在就应该做好准备。

    mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    mysql> exit;

对于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中获得的正确文件夹名称/

希望它能帮助到某人!

MySQL文档还指定了以下方法:

在选项文件(如my.cnf(Unix操作系统)或my.ini(Windows))中设置sql mode=“<mode>”。要通过命令行在服务器启动时设置SQL模式,请使用--SQL mode=“<modes>”选项。

*其中<modes>是用逗号分隔的不同模式列表。

要显式清除SQL模式,请在命令行上使用--sqlmode=“”或在选项文件中使用sqlmode=”将其设置为空字符串。

我在/etc/my.cnf中添加了sqlmode=“”选项,并成功了。

这个SO解决方案讨论了找出MySQL正在使用哪个my.cnf文件的方法。

进行更改后不要忘记重新启动MySQL。