Mysql 在我的Ec2中,它工作得很有魅力。
下面的方法解决了我的问题: 在ubuntu中 类型:Mysql 在我的Ec2中,它工作得很有魅力。,mysql,group-by,mysql-error-1055,Mysql,Group By,Mysql Error 1055,下面的方法解决了我的问题: 在ubuntu中 类型:sudo vi/etc/mysql/my.cnf 键入A以进入插入模式 在最后一行中,在下面粘贴两行代码: [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 键入esc退出输入模式 Type :wq to save a
sudo vi/etc/mysql/my.cnf
键入A以进入插入模式
在最后一行中,在下面粘贴两行代码:
[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
键入esc退出输入模式
Type :wq to save and close vim.
键入sudo service mysql restart以重新启动mysql。mysql 8.0更新 您的
sql模式
将不会有NO\u AUTO\u CREATE\u USER
,因为它已被删除,如下所述-
另外,如果某人没有my.cnf
文件,那么他们可以在/etc/my.cnf
中创建一个新文件,然后在Ubuntu中添加上述行。
步骤1:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
步骤2:转到最后一行并添加以下内容
sql_mode = ""
步骤3:保存
步骤4:重新启动mysql服务器。您好,不要获取所有列,只需使用
任意值(列名称)
获取所需内容即可。它工作得很好。检查一下
例如:
选择证明类型,任意值(“客户名称”)作为客户名称
从“tbl_客户_pod_上传”`
其中,`load\U id`='78'和`status`='Active'按`proof\U类型分组`
如果您使用的是PhpMyAdmin,请搜索“SQL模式”,并去掉以下值:仅由
填写,刚刚完成,一切正常 转到phpmyadmin并打开控制台并执行此请求
在下面输入
[mysqld]
sql_mode = ""
Ctrl+O=>Y=Ctrl+X
> sudo service mysql restart
这里有一个非常快速和简单的方法来永久设置它 注意:正在运行
SET GLOBAL sql_mode=(选择替换(@@sql_mode,'ONLY_FULL_GROUP_BY','')代码>是临时的,在服务器重新启动时,您仍然会出现错误。
要永久修复此问题,请执行以下操作
以root用户身份登录到服务器
在你的终点站
wgethttps://gist.githubusercontent.com/nfourtythree/90fb8ef5eeafdf478f522720314c60bd/raw/disable-strict-mode.sh
通过运行chmod+x disable strict mode.sh使脚本可执行
通过运行/disable strict mode.sh
您的操作完成后,将对mysql进行更改,并重新启动它我的部分数据库也有类似问题。我所做的是通过PHPStorm数据库控制台更改数据库中的参数,如下所示:
GROUP BY `proof_type`, `id`
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
像charm now一样工作只有_full_group_by=on告诉MySQL引擎:当您对要显示的结果有疑问并抛出错误时,不要应用group by
。仅当命令明确告诉您要做什么时才应用它。i、 e.当命令已满且完成时
only_full\u group\u by=off告诉MySQL引擎:始终应用group by
,如果您对选择的结果有疑问,只需随机选择一个
如果正确使用分组方式
,则不必关闭它强>
示例:
表:用户
id | name
----------------
1 ali
2 john
3 ali
在名称
列上使用分组依据
时:
SELECT * FROM users GROUP BY name;
有两种可能的结果:
1 ali
2 john
或
MYSQL不知道选择什么结果!因为有不同的id
s,但两者都有name=ali
解决方案1:
仅选择名称
字段:
SELECT name FROM users GROUP BY name;
结果:
ali
john
2 john
3 ali
这是一个完美的解决方案。删除使分组依据
混乱的列。这意味着你知道你在做什么。通常,您不需要
这些列,但如果需要,请转到解决方案3
解决方案2:
关闭仅\u满\u组\u by
。MYSQL将随机向您显示两个可能结果中的一个!!(如果您并不真正关心它将选择什么id
,则可以,但请记住在查询后立即将其关闭,以防止将来的groupBys出现意外行为)
解决方案3
使用Aggregate
函数,如MIN()
,MAX()
,帮助MYSQL决定必须选择什么
例如,我想要最大的id
:
SELECT MAX(id), name FROM users GROUP BY name;
结果:
ali
john
2 john
3 ali
它将选择ali
行,该行具有最大的id
我正面临这个问题,下面的查询不够
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
因为我正在使用存储过程。执行此查询后,我必须删除该过程,并在运行查询之前再次创建
SET SQL_MODE = '';
对于在本地使用CentOS/RHEL(Linux服务器)和XAMPP的
您好,我找到了一个非常不同的解决方案,我希望这对您有所帮助。(可能看起来有些过分,但与其他解决方案不同,这确实对我有效)
我正在运行CentOS 7,所有代码都在本地运行,但当我将其上载到服务器时,我开始发现这个问题所解决的错误
几个小时后,我试着从另一个角度来看这个问题,我记得我的本地安装程序使用了XAMPP,我认为我使用的是MySQL 8(MySQL 8安装在我的服务器上)
但在从XAMPP登录MySql后,我得到了下一个输出:
mysql -u root -p //Login
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 27
Server version: 10.4.18-MariaDB mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
是的,您可能也注意到了同样的情况,XAMPP使用的是MariaDB,因此解决方案是卸载mysql并安装MariaDB
当我运行Centos 7时,实现这一点的步骤如下:
从服务器上删除mysql
更新您的系统(这在每次安装新系统时都很常见)
将MariaDB添加到存储库
安装MariaDB
将MariaDB添加到启动中(每次系统重新启动时启动MariaDB)
然后,您可以通过运行下一个命令来保护安装:
最后一个命令将开始一个过程,您可以在其中设置密码和其他选项
在那之后,别忘了添加非root用户并授予它必要的特权,这是因为你不能在你的应用程序中使用root用户(是的,我必须弄清楚这一点)
id | name
----------------
1 ali
2 john
3 ali
SELECT * FROM users GROUP BY name;
1 ali
2 john
2 john
3 ali
SELECT name FROM users GROUP BY name;
ali
john
SELECT MAX(id), name FROM users GROUP BY name;
2 john
3 ali
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
SET SQL_MODE = '';
mysql -u root -p //Login
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 27
Server version: 10.4.18-MariaDB mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
# yum remove mysql mysql-server
# sudo yum -y update
# sudo tee /etc/yum.repos.d/MariaDB.repo<<EOF
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF
# sudo yum makecache fast
# sudo yum -y install MariaDB-server MariaDB-client
#sudo systemctl enable --now mariadb
# sudo mysql_secure_installation
# mysql -u root -p
CREATE USER 'YourUserName'@localhost IDENTIFIED BY 'YourPassword';
GRANT ALL PRIVILEGES ON *.* TO 'YourUserName'@localhost IDENTIFIED BY 'YourPassword' WITH GRANT OPTION;