MySQL 5.7 版本起,mysql.user 表移除了 password 字段,改用 authentication_string 存儲加密密文。許多舊教程仍使用 UPDATE ... SET password=PASSWORD(...),導致報錯 Unknown column 'password' in 'field list'。本文給出 macOS 終端下的標準修改流程。
mysql> UPDATE mysql.user SET password=PASSWORD('123456') WHERE user='root';
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
mysql -u root -p # 輸入當前密碼回車
USE mysql;
UPDATE user SET authentication_string=PASSWORD('新密碼') WHERE user='root' AND host='localhost';
FLUSH PRIVILEGES;
EXIT; mysql -u root -p'新密碼' -e "SELECT VERSION();"
MySQL 8.0 引入 ALTER USER 語法,更安全、更標準:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密碼'; -- 或指定加密插件(兼容老驅動) ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密碼';
| 錯誤寫法 | 適用版本 | 正確寫法 |
|---|---|---|
| SET PASSWORD FOR 'root'@'localhost' = PASSWORD('xxx') | 5.6 及以前 | 5.7+ 仍可用,但建議用 ALTER USER |
| UPDATE user SET password=PASSWORD('xxx') | 5.6 及以前 | UPDATE user SET authentication_string=PASSWORD('xxx') |
| mysqladmin -u root password 'xxx' | 所有版本 | 仍可用,底層調用 ALTER USER |
brew services stop mysql 或 sudo /usr/local/mysql/support-files/mysql.server stopsudo mysqld_safe --skip-grant-tables &mysql -u rootUPDATE authentication_string ... FLUSH PRIVILEGES;brew services restart mysql記住:5.7+ 看 authentication_string,8.0+ 首選 ALTER USER,再也不會踩字段不存在的坑。