我意外启用了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
其他回答
小心使用
SET sql_mode = ''
这实际上清除了当前启用的所有模式。如果你不想弄乱其他设置,你可以做一个
SELECT @@sql_mode
首先,要获得一个以逗号分隔的启用模式列表,然后将其设置为该列表,而不使用ONLY_FUL_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=""
在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`
MySQL 8.x的“优化器提示”呢?
例如:
SELECT /*+ SET_VAR(sql_mode='STRICT_TRANS_TABLES') */
... rest of query
更多信息:https://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html#optimizer-提示集变量