LaravelでSQLSTATE[HY000] [1049] Unknown database 'database':問題と解決策



1. SQLSTATE[HY000] 問題の概要
このエラーは、Laravelアプリケーションが接続しようとしているデータベースが存在しない場合に発生します。具体的には、データベース接続を試みる際に、指定されたデータベース名がMySQLサーバーに見つからないときに出現します。
SQLSTATE[HY000] [1049] Unknown database 'database'
1.1. 原因
次のような原因が考えられます。
- データベースが存在しない
- データベースがMySQLサーバー上に作成されていない。
- .envファイルの設定ミス
- Laravelの環境設定ファイルである
.env
ファイルに誤ったデータベース名が記載されている。
- Laravelの環境設定ファイルである
- キャッシュの問題
- 環境設定がキャッシュされており、更新された
.env
ファイルの内容が反映されていない。
- 環境設定がキャッシュされており、更新された


2. 解決策
2.1. データベースの存在確認
まず、MySQLにログインし、指定されたデータベースが存在するか確認します。
mysql -u your_username -p
SHOW DATABASES;
指定されたデータベースがリストにない場合、以下のコマンドでデータベースを作成します。
CREATE DATABASE your_database_name;
phpmyadminで確認する場合はhttp://localhost/phpmyadmin/に移動して、データベースが存在するか確認します。
2.1.1. Xamppを使用している場合
Xamppを使用している場合は、shellをクリックしてログインしてください。

2.2. .envファイルの確認
.env
ファイルを開き、DB_DATABASE
の値が正しいか確認します。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_password


DB_DATABASE
の値が実際に存在するデータベース名と一致していることを確認してください。
2.3. キャッシュのクリア
環境設定がキャッシュされている場合、設定変更が反映されないことがあります。以下のコマンドでキャッシュをクリアします。
php artisan config:cache
php artisan config:clear
このコマンドを実行することで、新しい設定が適用されます。
2.4. マイグレーションの実行
データベースが存在し、.env
ファイルの設定が正しいことを確認したら、データベースマイグレーションを実行してテーブルを作成します。
php artisan migrate

3. エラーの検証と修正
SQLSTATE[HY000] [1049] Unknown database ‘database’ というエラーを実際に発生させます。
LaravelでSQLSTATE[42S02] Table ‘database.table’ doesn’t exist:問題と解決策
と似たコードを使用します。


3.1. 検証環境
- PHP 8.1.25
- Laravel 10.48.12
- Windows 11
3.2. プロジェクトの作成
まず、エラー検証を行うためのサンプルプロジェクトを作成します。
composer create-project laravel/laravel SampleProject
3.3. .envファイルの編集
存在しないデータベースを作成するために.envファイルを編集します。今回はDB_DATABASEで名前を指定できるので、databaseという名前にします。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=root
DB_PASSWORD=


3.4. コントローラーの作成
次に、`Users` テーブルに登録されているユーザー数をカウントするコントローラーを作成します。ここでは、例として `SampleController` を作成します。
php artisan make:controller SampleController
作成したコントローラーに以下のメソッドを追加します。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
class SampleController extends Controller
{
public function index(){
$count = User::count();
return response($count);
}
}
このコードは、User テーブルのレコード数を取得してレスポンスとして返すプログラムです。

3.5. ルーティング
次に、ルーティングを設定します。`web.php` ファイルで以下のようにルーティングを追加してください。
use App\Http\Controllers\SampleController;
Route::get('/', [SampleController::class, 'index']);
この設定により、ブラウザで http://127.0.0.1:8000/
にアクセスすると、SampleController の index メソッドが実行されます。
3.6. エラーの発生と検証
まず、ターミナルで以下のコマンドを実行します。
php artisan serve
次に、ブラウザで http://127.0.0.1:8000/
にアクセスします。すると、”SQLSTATE[HY000] [1049] Unknown database ‘database'” というエラーが発生します。
このエラーは、database
が存在しないために発生します。したがって、マイグレーションを行う必要があります。
ターミナルで以下のコマンドを実行して、マイグレーションを実行します。
php artisan migrate
Warn(警告)としてデータベースが存在しないということがでてきますが、yesを選択してマイグレーションを実行します。
これにより、database
が作成されて、テーブルが作成されます。
再度 http://127.0.0.1:8000/
にアクセスして、エラーが解消されたことを確認します。
ということで、何もしていないので登録数が0として表示されました。


3.7. まとめ
SQLSTATE[HY000] [1049] Unknown database ‘database’エラーは、主にデータベースの存在確認や環境設定の修正によって解決できます。これらを確認し、問題が解決するか試してみてください。