我意外启用了ONLY_FUL_GROUP_BY模式,如下所示:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
如何禁用它?
我意外启用了ONLY_FUL_GROUP_BY模式,如下所示:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
如何禁用它?
当前回答
仅向sql_mode添加一种模式,而不删除现有模式:
SET sql_mode=(SELECT CONCAT(@@sql_mode,',<mode_to_add>'));
仅从sql_mode中删除特定模式,而不删除其他模式:
SET sql_mode=(SELECT REPLACE(@@sql_mode,'<mode_to_remove>',''));
在这种情况下,如果您只想删除only_FUL_GROUP_BY模式,请使用以下命令:
SET sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
参考:http://johnemb.blogspot.com/2014/09/adding-or-removing-individual-sql-modes.html
其他回答
如果sql_mode上有ANSI,需要注意一点:
等效于REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE和(从MySQL 5.7.5开始)ONLY_FUL_GROUP_BY。
看见https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_ansi
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。
从MySQL 5.7.x开始,默认的sql模式包括ONLY_FUL_GROUP_BY。
(在5.7.5之前,MySQL不检测功能依赖性,默认情况下未启用ONLY_FUL_GROUP_BY)。
ONLY_FUL_GROUP_BY:将拒绝非确定性分组查询
有关更多详细信息,请查看sql_mode的文档
您可以按照以下任一方法修改sql_mode
方法1:
检查sql_mode的默认值:
SELECT @@sql_mode
通过执行以下查询从控制台中删除ONLY_FUL_GROUP_BY:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
方法2:
访问phpmyadmin以编辑sql_mode
登录phpmyadmin并打开localhost在菜单项的顶部显示变量,并搜索sql模式单击编辑按钮删除ONLY_FUL_GROUP_BY并保存
重新启动MySQL服务器
sudo service mysql restart
OR
注销phpmyadmin并再次登录。
如果您正在使用WAMP。左键单击WAMP图标,然后转到MySQL->MySQL设置->sql模式然后选择sql模式->用户模式
使用MySQL 5.7.28版检查SELECT@@sql_mode;并使用更新
SET @@sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'