MySQL设置only_full_group_by报错问题
开发环境连接的 mysql5.6
,而测试环境是 mysql5.7
。开发中有小伙伴写了有关 group by
的 sql
语句。在开发环境中运行是正常的,而到了测试环境中就发现了异常。
原因分析:MySQL5.7
版本默认设置了 mysql sql_mode = only_full_group_by
属性,导致报错。
其中 ONLY_FULL_GROUP_BY
就是造成这个错误的罪魁祸首了,在这种严格模式下,对于 group by
聚合操作,若在 select
中的列没有在group by
中出现,那么这个 SQL
就是不合法的。因为开发写的 sql
中,select
列不在 group by
从句中,在使用 group by
时就会报错。
测试环境下载安装的是最新版的 mysql5.7.x
版本,默认是开启了 only_full_group_by
模式的。
1. 查看 sql_mode
SELECT` `@@sql_mode;
查询出来的值为:
2. 去掉ONLY_FULL_GROUP_BY,重新设置值。
SET` `@@``global``.sql_mode =``'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'``;
3. 上面是改变了全局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'``;
以上方法mysql数据库重启后依然无效,下列方式重启后依然生效
找到 MySQL
的配置文件,在 linux
系统上 /etc/my.cnf
文件,查询 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
需要注意的一点是一定要添加在 [mysqld]
配置内,这样添加完后重启mysql
才会生效,退出数据库:exit,重启命令:
service mysqld restart
#lnmp重启mysql
lnmp restart mysql
刷新页面报错信息消失成功解决,再次连接上数据库查看 sql_mode
配置 select @@sql_mode
:
以下为sql_mode常用值的含义,参考:
ONLY_FULL_GROUP_BY:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中
NO_AUTO_VALUE_ON_ZERO:该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。
STRICT_TRANS_TABLES:在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制
NO_ZERO_IN_DATE:在严格模式下,不允许日期和月份为零
NO_ZERO_DATE:设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。
ERROR_FOR_DIVISION_BY_ZERO:在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如果未给出该模式,那么数据被零除时MySQL返回NULL
NO_AUTO_CREATE_USER:禁止GRANT创建密码为空的用户
NO_ENGINE_SUBSTITUTION:如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
PIPES_AS_CONCAT:将”||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
ANSI_QUOTES:启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanfehia
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01