1.问题原因
MySQL 5.7.5后only_full_group_by成为sql_mode的默认选项之一,导致了一些sql语句的失效。
2.解决方法
-
打开navicat,点击新建查询
select @@global.sql_mode
结果应该是:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
再执行一条sql语句:
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'
如果是mysql8及以上请把NO_AUTO_CREATE_USER删去
原因:MySQL8取消了NO_AUTO_CREATE_USER
即set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
-
修改mysql.cnf文件
- 切换到对应用户下执行sudo vim /etc/mysql/conf.d/mysql.cnf
- 然后输入 i 将模式变为insert
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退出insert模式
- 最后输入:wq 保存退出
- 重启msyql: sudo service mysql restart