Laravel数据库配置在.env文件,需修改DB_CONNECTION、DB_HOST、DB_PORT、DB_DATABASE四行,MySQL还需DB_USERNAME和DB_PASSWORD;改完须用DB::connection()->getPdo()验证连接,再清缓存运行迁移。

数据库配置文件在哪、改哪几行
Laravel 的数据库配置全在 .env 文件里,不是 config/database.php ——后者只是读取 .env 的值并做默认兜底。新手常误改 config/database.php 却没生效,就是因为 .env 优先级更高,且被 git 忽略,本地改了才管用。
必须改的四行是:
-
DB_CONNECTION=mysql(或pgsql、sqlite,选你实际用的) -
DB_HOST=127.0.0.1(别写localhost,尤其 Docker 环境下会走 socket 导致连不上) -
DB_PORT=3306(MySQL 默认是 3306,但 MAMP/XAMPP 可能是 8889,得看自己服务实际端口) -
DB_DATABASE=your_db_name(库名必须提前手动创建好,Laravel 不会自动建库)
如果用 MySQL 账号密码不为空,还要补上 DB_USERNAME 和 DB_PASSWORD。漏掉任一字段,php artisan migrate 时大概率报 SQLSTATE[HY000] [1045] Access denied。
运行迁移前必须验证连接
改完 .env 别急着跑 php artisan migrate。先用 Laravel 自带命令测连通性:php artisan tinker 进去后执行 DB::connection()->getPdo();。如果抛出异常,说明配置错或数据库服务根本没起来。
常见卡点:
- Docker 环境下
DB_HOST写成localhost→ 改成宿主机 IP 或服务名(如mysql) - MySQL 8+ 默认用
caching_sha2_password插件,Laravel 8 以下版本不兼容 → 改用户认证方式:ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_pass'; - SQLite 用户忘了把
DB_DATABASE改成绝对路径(如database/database.sqlite),相对路径会导致找不到文件
config/database.php 里 driver 和 prefix 怎么配
config/database.php 里真正影响行为的是 'default' 键(对应 .env 的 DB_CONNECTION)和各连接下的 'driver'、'prefix'。其中 'prefix' 是表名前缀,比如设为 'prefix' => 'laravel_',那 php artisan make:migration create_users_table 生成的表实际叫 laravel_users。
注意两个细节:
-
'driver'值必须和 .env 中DB_CONNECTION完全一致(大小写敏感),否则 Laravel 找不到对应配置块 - 如果项目要切多库(比如读写分离),
'connections'数组里得额外定义'mysql_read'和'mysql_write',并在模型里用on('mysql_read')显式指定,不能只靠 .env - 修改 config/database.php 后,记得清缓存:
php artisan config:clear,否则改了也不生效
本地开发用 SQLite 最省事,但别上线还这么干
新手起步最稳的组合是:.env 里设 DB_CONNECTION=sqlite,DB_DATABASE=database/database.sqlite,然后 touch database/database.sqlite 创建空文件。不用装 MySQL,零配置就能跑迁移和 seed。
但 SQLite 有硬伤:
- 不支持外键约束(除非显式启用,且 Laravel migration 默认不加)
- 没有 ALTER COLUMN 语法 → 后期改字段类型或长度只能删表重建
- 并发写入性能差,
php artisan serve多开几个标签页就可能报database is locked
所以本地验证逻辑可以,一旦要测真实业务流程(比如队列、事务、锁),就得切回 MySQL/PostgreSQL。别等部署到服务器才发现 SQL 语法不兼容。


















