配对失败主因是db_password含特殊字符未加引号、配置缓存未彻底清除、mysql用户权限未授权127.0.0.1、或phpstudy端口/远程访问配置错误。

配对了还是连不上,大概率不是密码错了,而是密码被解析出问题、缓存没刷新、或权限/网络策略拦住了。
DB_PASSWORD 里有特殊字符却没加引号
Laravel 读取 .env 文件时,若 DB_PASSWORD 包含 #、:、$、 (空格)等字符,且未用单引号或双引号包裹,dotenv 解析器会截断或误判。
- 错误写法:
DB_PASSWORD=abc#123→ 实际只取到abc - 正确写法:
DB_PASSWORD='abc#123'或DB_PASSWORD="abc#123" - 验证方式:在终端执行
php artisan tinker,然后输入env('DB_PASSWORD'),看输出是否完整
配置已改但 Laravel 还在用旧缓存
Laravel 会把 .env 缓存进 bootstrap/cache/config.php,改完不清理就永远读不到新值。
- 必须依次执行:
php artisan config:clear→php artisan cache:clear(后者清应用缓存,有时也影响连接) - 别只跑
config:cache—— 它只缓存当前配置,不会主动拉新.env值;而且一旦缓存了,再改.env也不生效 - 开发环境建议干脆不用
config:cache,避免这类干扰
用户有账号,但没给 localhost 权限
MySQL 用户名看起来一样,但 'user'@'localhost' 和 'user'@'127.0.0.1' 是两个不同账户,权限需单独授。
- Laravel 默认用
DB_HOST=127.0.0.1(TCP 连接),而非localhost(Unix socket),所以得确认授权的是@'127.0.0.1'而非仅@'localhost' - 登录 MySQL 后执行:
SELECT Host, User FROM mysql.user WHERE User = 'your_user';,检查 Host 列是否包含127.0.0.1 - 如缺失,用
GRANT ALL ON your_db.* TO 'your_user'@'127.0.0.1' IDENTIFIED BY 'your_pass'; FLUSH PRIVILEGES;
本地开发用 phpStudy / XAMPP,端口被占或服务没真正启动
phpStudy 界面显示“已启动”,不代表 MySQL 进程真在监听你配的端口。
- 查端口占用:
netstat -ano | findstr :3306(Windows)或lsof -i :3306(macOS/Linux),确认是 mysqld 进程在用 - phpStudy 改过端口(比如 3308),但
.env还是DB_PORT=3306→ 必须同步改 - 某些新版 phpStudy 默认关闭远程访问,即使本地连也得手动开:进 phpStudy → 数据库 → 管理 → 执行
use mysql; UPDATE user SET host='%' WHERE user='root'; FLUSH PRIVILEGES;
最常被忽略的是:你以为输对了密码,其实 .env 里那个值早被特殊字符截断了;或者你以为清了缓存,其实只跑了 config:clear 没跑 cache:clear。这两点卡住的人最多。











