Windows下MySql5.7.17更改密码时出错“ERROR 1054 (42S22): Unknown column ‘password’ in ‘field list’"

今天在windows下配置了Mysql5.7.17,在修改密码的过程中遇到了错误提示ERROR 1054 (42S22): Unknown column ‘password’ in ‘field list’,查找了很多解决方案,下面的方法完美的解决了我的问题:
1. 配置环境变量Path:将mysql的bin所在路径添加到Path中
2. 把安装目录的my-default.ini文件删掉,新建一个my.ini,添加下面的代码到my.ini文件中

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8 
[mysqld]
skip-grant-tables
#设置3306端口
port = 3306 
# 设置mysql的安装目录
basedir=D:\MySql\mysql-5.7.17-winx64\mysql-5.7.17-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\MySql\mysql-5.7.17-winx64\mysql
### 错误原因分析 错误 `ERROR 1054 (42S22): Unknown column 'password' in 'field list'` 通常出现在尝试对 `mysql.user` 表进行操作,使用了不存在的字段名 `password`。在 MySQL 5.7.6 及以上版本中,`user` 表中存储用户密码的字段名称已经从 `password` 更改为 `authentication_string`。如果仍然使用旧版本的命令,就会导致此错误[^4]。 此外,该错误也可能出现在创建用户的插入语句中,如果尝试插入到 `password` 字段而该字段并不存在,也会触发此错误[^3]。 --- ### 解决方法 #### 1. 修改 MySQL 用户密码 如果你的目标是修改 MySQL 用户(如 `root`)的密码,并且遇到此错误,可以按照以下步骤操作: ##### 步骤一:跳过权限验证启动 MySQL 以管理员身份打开命令行工具,执行以下命令来停止 MySQL 服务: ```bash net stop mysql ``` 然后使用以下命令跳过权限验证启动 MySQL: ```bash mysqld --skip-grant-tables ``` 再打开另一个命令行窗口,直接输入以下命令登录 MySQL: ```bash mysql ``` ##### 步骤二:修改密码 进入 MySQL 后,执行以下命令切换到 `mysql` 数据库: ```sql use mysql; ``` 然后根据你的 MySQL 版本执行以下命令之一: - **MySQL 5.7.6 之前版本**: ```sql update user set password = password('新密码') where user = 'root'; ``` - **MySQL 5.7.6 及以上版本**: ```sql update user set authentication_string = password('新密码') where user = 'root'; ``` ##### 步骤三:刷新权限并重启服务 执行以下命令刷新权限: ```sql flush privileges; ``` 退出 MySQL,关闭之前打开的两个命令行窗口,重新以管理员身份打开命令行并启动 MySQL 服务: ```bash net start mysql ``` --- #### 2. 创建用户避免错误 如果你在创建用户遇到此错误,请避免直接插入 `mysql.user` 表。推荐使用标准的 SQL 命令来创建用户和授权: ```sql CREATE USER '新用户'@'主机名' IDENTIFIED BY '密码'; GRANT 权限类型 ON 数据库名.表名 TO '用户'@'主机名'; FLUSH PRIVILEGES; ``` 例如: ```sql CREATE USER 'clover'@'localhost' IDENTIFIED BY 'clover123'; GRANT SELECT, INSERT, UPDATE ON *.* TO 'clover'@'localhost'; FLUSH PRIVILEGES; ``` 这种方式可以避免直接操作 `user` 表带来的字段不匹配问题[^3]。 --- #### 3. 数据库表字段确认 如果你需要操作 `mysql.user` 表,请先查看该表的结构,以确认当前 MySQL 版本中支持的字段名称: ```sql DESCRIBE mysql.user; ``` 此命令将列出所有字段,包括 `authentication_string` 和其他权限字段。根据实际字段名称编写 SQL 语句,避免使用已弃用的字段名 `password`。 --- ### 总结 此错误的核心原因是字段名称 `password` 在较新版本的 MySQL 中已被弃用。解决方法包括: - 使用正确的字段名 `authentication_string` 进行密码更新。 - 使用 `CREATE USER` 和 `GRANT` 命令来创建用户和授权,而不是直接操作 `mysql.user` 表。 - 如果忘记密码,可以通过跳过权限验证的方式登录并修改密码[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值