SQL问题记录

SQL问题记录

问题一

权限问题:java.sql.SQLException: The user specified as a definer (‘root’@‘%’) does not exist

解决方案:

在Navicat for MySQL中按F6进入命令列界面
mysql> grant all privileges on *.* to root@"%" identified by ".";
mysql> flush privileges;

问题二

SQL语句中使用了 group by分组函数报错

**产生原因:**在MySQL数据库版本为5.7以上的版本,默认开启了 ONLY_FULL_GROUP_BY SQL模式,在此模式下,对于group by操作,如果在select语句中的查询列没有在group by中出现,那么这个SQL就是非法的,因为列不在group by语句中,所以设置了sql_mode=only_full_group_by的数据库,在使用group by时就会报错

解决方案:

方案一:临时使用,重启后失效

在Navicat中,输入下列SQL语句进行查询:SELECT @@GLOBAL.sql_mode;
查询结果如下:
	ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
通过上面的查询结果,可以看到 开启了 ONLY_FULL_GROUP_BY 模式,这里第一种解决方案就是,去除 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';
执行完上面的SQL语句之后,再次执行报错的SQL语句,发现可以正常运行了。

方案二:

除了上面的手动设置sql_mode值之外,还可以在 MySQL 的配置文件中进行设置。
1、对于 Linux系统,进到 /etc/my.cnf 文件下,查询sql_mode字段,由于在配置文件中未找到这个关键字,所以我在[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
添加完之后,保存退出,重启 MySQL 即可生效。

2、对于windows系统,进行 MySQL安装目录下,找到 my.ini 文件,同样在配置文件中搜索sql_mode关键字,若未搜索到,则需要在  [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
添加完毕之后,保存退出,然后重启一下 MySQL 服务即可生效

问题三: 云端数据拉取后导入本地报utf8mb4_0900_ai_ci错误

原因: utf8mb4_0900_ai_ci在mysql8以下是不被支持的.检查发现本地数据库为5.7.

处理方法:
导出的数据库需要修改utf8mb4_0900_ai_ci为utf8mb4_unicode_ci或者utf8mb4_general_ci。
配置utf8mb4_unicode_ci或者utf8mb4_general_ci时,需要数据库支持utf8mb4。
数据库更换为mysql8
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值