Laravel连不上本地数据库主因是连接链路中断:需确认.env修改后执行php artisan config:clear、DB_HOST填127.0.0.1而非localhost、DB_PORT匹配实际端口、DB_DATABASE已手动创建且大小写精确、DB_PASSWORD含特殊字符须加单引号、MySQL 8认证插件不兼容时改用mysql_native_password。

Laravel安装后连不上本地数据库,通常不是框架装错了,而是连接链路在某处断开了。问题大多出在配置没生效、参数填错、服务没跑通,或环境特殊性被忽略。
配置没刷新,改了等于白改
.env 文件改完不清理缓存,Laravel 仍用旧值连接:
- 每次修改 .env 后必须运行 php artisan config:clear
- 如果之前执行过
config:cache,得先config:clear再重缓存(开发阶段建议禁用config:cache) - 验证是否生效:进
php artisan tinker,输入config('database.connections.mysql.host'),看输出是不是你填的 IP 或域名
DB_HOST 和端口填得不对
看似简单,却是最高频的硬伤:
- 别写 localhost——它可能触发 Unix socket 连接,而你的 MySQL 实际监听 TCP;统一填 127.0.0.1
- DB_PORT 不能空着,默认是 3306,但 MAMP 是 8889,Docker 可能映射为 3307,得查
docker ps或 MySQL 配置确认 - Linux 环境下 DB_DATABASE 大小写必须和 MySQL 里完全一致(如
my_app≠My_App)
数据库本身没准备好
Laravel 不会自动建库,也不检查权限是否足够:
- 手动登录 MySQL:
mysql -u root -p,再执行SHOW DATABASES;,确认DB_DATABASE的值真实存在 - 若不存在,运行:
CREATE DATABASE `my_app` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;(注意反引号,尤其库名含短横线时) - 确保
DB_USERNAME对该库有CREATE、ALTER、INSERT权限,不只是SELECT
密码含特殊字符或认证插件不兼容
看着连得上,其实卡在认证环节:
- DB_PASSWORD 含
@、$、/、:、?等字符时,必须用单引号包裹整个值,例如:DB_PASSWORD='p@ss/w0rd' - MySQL 8 默认用
caching_sha2_password插件,老版本 PHP(如 7.2)不支持;解决方法:运行ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 验证 PDO 是否就绪:
php -r "var_dump(PDO::getAvailableDrivers());"应包含mysql;再用DB::connection()->getPdo()测试连接实例


















