Oprava SQLSTATE[HY000] [1049] Unknown Database v Laravel - Deep Dive
Při práci se systémem Laravel se můžete setkat s následující chybou: SQLSTATE[HY000] [1049] Neznámá databáze 'mydatabase'
To znamená, že databázi, kterou má Laravel používat, nelze v MySQL/MariaDB najít. Níže je uveden podrobnější průvodce, který kombinuje moudrost komunity, běžná úskalí a specifické opravy zaměřené na Laravel.
Proč může Laravel vyhodit tuto chybu
Zde jsou uvedeny opakující se příčiny v nastaveních Laravel:
-
Zbytky výchozí databáze v konfiguraci Laravel
config/database.phpčasto nastavuje výchozí hodnoty jako:'database' => env('DB_DATABASE', 'laravel'),'username' => env('DB_USERNAME', 'laravel'),Pokud vaše
.envnení načtena nebo je konfigurace uložena v mezipaměti, může Laravel přejít zpět na funkcilaravela pokusit se k němu připojit. -
Konfigurace v mezipaměti nebo zastaralá konfigurace Změna
.envnestačí, pokud je konfigurace uložena v mezipaměti. Je třeba vymazat konfigurační mezipaměť Laravelu:php artisan cache:clearphp artisan config:cacheTím donutíte Laravel, aby znovu přečetl
.enva obnovit jeho interní nastavení. -
Špatně
.envnesoulad nastavení / portů Pokud váš server MySQL běží na nestandardním portu (např. 3308 namísto 3306), je v systému Laravel použita funkceDB_PORTse musí shodovat. Také dvakrát zkontrolujte, zda v textu nejsou překlepy, odlehlé mezery nebo zalomení řádků..envsoubor. -
Databáze nebyla vytvořena nebo zrušena Pokud nakonfigurovaná databáze na serveru neexistuje, Laravel se nebude moci připojit. Vytvoření databáze obvykle problém vyřeší.
Opravy krok za krokem zaměřené na Laravel
Zde je kontrolní seznam, podle kterého můžete tuto situaci spolehlivě vyřešit:
| Krok | Akce | Proč / Poznámky |
|---|---|---|
| 1 | Otevřete si .env a ověřit údaje v databázi |
Zajistit DB_DATABASE, DB_USERNAME, DB_PASSWORD, DB_HOST, DB_PORT jsou přesně správné a odpovídají vašemu nastavení MySQL |
| 2 | Vytvoření databáze, pokud chybí | CREATE DATABASE my_app_db; prostřednictvím klienta MySQL nebo uživatelského rozhraní správce |
| 3 | Vymazání mezipaměti Laravelu a opětovné uložení konfigurace do mezipaměti | php artisan cache:clear a pak php artisan config:cache, čímž se zajistí, že Laravel načte nová nastavení. |
| 4 | Restartování vývojového serveru / služeb | Pokud je spuštěn prostřednictvím php artisan serve nebo Docker, restartujte, aby se změny uplatnily |
| 5 | Ověření shody portu a hostitele | Pokud MySQL naslouchá na jiném než výchozím portu, vaše DB_PORT musí odrážet |
| 6 | Udělení potřebných oprávnění uživateli DB | GRANT ALL PRIVILEGES ON my_app_db.* TO 'my_user'@'localhost'; FLUSH PRIVILEGES; |
| 7 | Spouštění migrací | php artisan migrate pro spuštění schématu |
Jak řešit
-
Správně
.envDB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306 # or whatever your MySQL usesDB_DATABASE=my_app_dbDB_USERNAME=my_userDB_PASSWORD=secret -
Zkontrolujte, zda databáze existuje
CREATE DATABASE my_app_db; -
V případě potřeby propláchněte privilegia
GRANT ALL PRIVILEGES ON my_app_db.* TO 'my_user'@'localhost';FLUSH PRIVILEGES; -
Vymazání mezipaměti Laravelu a opětovné načtení konfigurace
php artisan cache:clearphp artisan config:cache -
Restartujte nebo znovu načtěte server / prostředí Pokud používáte
php artisan servenebo Docker, zastavit a znovu spustit. -
Kontrola přepisů konfigurace Vyhledávání duplicit
.envsoubory nebo konfigurační cesty specifické pro dané prostředí, které by mohly přepsat zamýšlené nastavení. -
Spouštění migrací
php artisan migrate
Pokud se po provedení všech těchto kroků chyba stále objevuje, překontrolujte, zda se ve vašem textu nenachází zbloudilé mezery nebo skryté znaky. .env klíče.