1:出现背景
项目中使用了mysql,当项目启动时报出上面的异常错误
2:出现原因
在mysql中,不允许将sql_mode变量的值设置为上面的内容,它是不被支持的。但取决于你的mysql版本,如果当你的版本为5.7时不会存在这个问题,但是如果是8.0版本并且你的sql_mode设置了上面的内容就会抛出异常。
补充:no_auto_create_user是什么?
NO_AUTO_CREATE_USER 是一个已废弃的 SQL 模式选项,在早期的 MySQL 版本中用于控制 GRANT 语句的行为。当这个模式被激活时,它会阻止 GRANT
语句自动创建不存在的用户账户,除非在授予权限的同时也指定了用户的密码。这意味着,如果你尝试为一个尚不存在的用户授予权限,
而且没有提供密码,MySQL 不会自动创建这个用户,而是会失败或者忽略这个请求。
例如,如果你执行如下 GRANT 语句:
GRANT SELECT ON database.* TO 'newuser'@'localhost';
在 NO_AUTO_CREATE_USER 模式下,如果 'newuser'@'localhost' 这个用户之前不存在,并且没有同时提供一个密码,
这个命令将会失败,以防止无意识地创建用户账户。
然而,从 MySQL 8.0.11 开始,包括 NO_AUTO_CREATE_USER 在内的几个与账户管理相关的旧特性已被移除,因此在 MySQL 8.0 及以后的版本中,
你不再需要也不应该使用 NO_AUTO_CREATE_USER 这个模式选项。在这些新版本中,如果想要创建用户并授予权限,
必须明确地使用 CREATE USER 语句创建用户,然后再使用 GRANT 语句分配权限,并且在创建用户时提供密码。
3:解决
知道出现问题的原因,那么解决就很简单了
- 调整配置文件中的sql_mode属性的值,例如在这里插入代码片
sql_mode='STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
- 将no_auto_create_user 改成 disallow user create