我按照this SO question的第二个回答来禁用全局选项 ONLY_FULL_GROUP_BY。
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0,00 sec)
mysql> SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Query OK, 0 rows affected (0,00 sec)
mysql> SELECT @@sql_mode;
+------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+------------------------------------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------------------------------------+
1 row in set (0,00 sec)
我刚刚发现在重启mysql服务后,该选项已恢复。
这是我的环境
Server: Localhost via UNIX socket
MySQL 5.7.17-0ubuntu0.16.04.1
Ubuntu 16.04
我认为它出现在其中一个配置文件中,但我无法找到它。你能指出我它位于何处或如何永久禁用它?
答案 0 :(得分:3)
实测值:
我必须在/etc/mysql/mysql.conf.d/mysqld.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_SUBSTITUTION"
然后重新启动
sudo systemctl restart mysql
重新启动后,我的设置现在保留。
答案 1 :(得分:1)
您可以在此处列出的路径中找到(或创建)配置文件 - Using Option Files
在[mysqld]部分的配置文件中,您需要编写选项,例如:
[mysqld]
sql_mode=ONLY_FULL_GROUP_BY