我意外启用了ONLY_FUL_GROUP_BY模式,如下所示:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
如何禁用它?
我意外启用了ONLY_FUL_GROUP_BY模式,如下所示:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
如何禁用它?
当前回答
解决方案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并单击保存。
其他回答
这对我有用:
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
如果您正在使用WAMP。左键单击WAMP图标,然后转到MySQL->MySQL设置->sql模式然后选择sql模式->用户模式
更新:
要保持当前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
借助以下查询禁用ONLY_FUL_GROUP_BY。
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
要启用ONLY_FUL_GROUP_BY,请使用以下查询。
SET sql_mode = 'ONLY_FULL_GROUP_BY';
最好是在新项目上使用ONLY_FUL_GROUP_BY,同时在现有站点和数据库上保持向后兼容。为此,我选择在类中加载mysqli和PDO时修改SQL模式。
对于mysqli:
mysqli_query($this->link,"SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))");
对于PDO类:
PDO::MYSQL_ATTR_INIT_COMMAND => "SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"
PDO初始化示例:
try {
$dns = 'mysql:host=localhost;dbname=' . $prod_db;
$user = _DBUSER_;
$pass = _DBPASS_;
$options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
PDO::MYSQL_ATTR_INIT_COMMAND => "SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"
);
$db = new PDO($dns, $user, $pass, $options);
}
catch(Exception $e) {
mail("contact@xxxxxx.xx","Database Error ",$dns.",".$user);
echo "Unable ot connect to mySQL : ", $e->getMessage();
die();
}
因此,在同一服务器上创建的新类将使用新的数据库标准。