Mysql 8踩坑之1054(42S22):Unkown column ‘password‘ in ‘field list‘ 与1251- Client deos not support authen

之前测试都是用的mysql5.5的环境或者是使用Mariadb的环境 ,没有使用过 Mysql 8所以当环境变成Mysql 8的时候 便遇到了许多问题,为了避免以后忘记,方便随时翻找资料,这里记录一下踩坑情况。

问题1:执行sql :select user, password, host from user;查询用户密码时 提示:ERROR 1054(42S22):Unkown column 'password' in 'field list' 现象如下图所示:

问题原因:password 字段是在mysql 8以下的版本中标记mysql数据库里 user表里的密码字段,但是mysql 8的密码字段改了,改成了:authentication_string

所以当环境变成mysql 8的时候 对应的sql语句应该变成:select user, authentication_string, host from user;

 

问题2:使用navicat 工具连接 msyql 8的服务器时提示:1251- Client deos not support authentication protocal requested by server; consider upgrading MySQL client。 问题现象如下图(如果通过命令运行的mysql 客户端版本低于8 也会出现类似的提示):

 问题原因: mysql8 的密码验证机制跟之前的版本是不一样的,具体表现之一就是上文提到的 密码字段 password 与 authentication_string ,低版本的连接工具使用的密码加密协议是不符合mysql 8 要求的,因此 只需要更换客户端连接工具,使得其支持mysql 8对应的协议即可。

解决办法:可用于Mysql8 的连接工具 ,这里也提供了一个下载链接(23条消息) 适用于Mysql8的navicat工具与jdbc连接驱动-MySQL文档类资源-CSDN文库

 安装好新的连接工具按照正常连接方式连接即可。

### 错误原因分析 错误 `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、付费专栏及课程。

余额充值