Laravel11では、デフォルトのデータベース管理システムがsqlitになっています。
ディレクトリ指定でLaravelプロジェクトを新規作成した場合、デフォルトのデータベース管理システムはSQLiteになります。
設定を変更せずphp artisan migrateコマンドを実行すると、エラーになります。
エラーの解決して、データベース管理システムを変更する方法をご紹介します。
The SQLite database configured for this application does not exist
.envファイルの 「DB_CONNECTION=sqlite」を変更します。MariaDBを使っている場合には、「DB_CONNECTION=mariadb」とします。MySQLの場合は、「DB_CONNECTION=mysql」とします。
【.env】
DB_CONNECTION=mariadb

Unknown collation: ‘utf8mb4_0900_ai_ci’
2024/3/15追記
MariaDBの場合は、さらにもうひとつトラップがありますが、こちらのトラップは、すでに解決されました。ご覧になる方はいないかもしれませんが、念のため残しておきます。
—–
Laravel11では、デフォルトのデータベース接続設定が変更されています。そのため、これまでどおりの設定でマイグレーションを実行しようとすると、次のようなエラーになります。
SQLSTATE[HY000]: General error: 1273 Unknown collation: ‘utf8mb4_0900_ai_ci’ (Connection: mysql, SQL: select table_name as `name`, (data_length + index_length) as `size`, table_comment as `comment`, engine as `engine`, table_collation as `collation` from information_schema.tables where table_schema = ‘laravel’ and table_type in (‘BASE TABLE’, ‘SYSTEM VERSIONED’) order by table_name)

こちらは、config/database.phpを変更する必要があります。.envに指定したデータベースのcollationを下記のように変更します。
【config/database.php】
'mariadb' => [
'driver' => 'mariadb',
'url' => env('DB_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'laravel'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => env('DB_CHARSET', 'utf8mb4'),
// 'collation' => env('DB_COLLATION', 'utf8mb4_uca1400_ai_ci'),
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],

これで再度実行してみてください。
もし下記のようなエラーになった場合には、一度データベースを削除し、作成しなおしてみてください。

phpMyAdminの場合は、操作タブから削除できます。

エラーの原因
エラーの原因ですが、collationの設定の違いによります。
データベースを新規作成する際、名前と照合順序を設定します。Laravel11からは、「utf8mb4_0900_ai_ci」がデフォルト設定となっています。

もしutf8mb4_0900_ai_ciを選択できる場合には、config/database.phpは変更せず、データベース作成時にutf8mb4_0900_ai_ciを選びましょう。
ですが、MariaDBを使っている場合には、utf8mb4_0900_ai_ciが選択できません。そこで本記事では、Laravel10までと同じ設定をご紹介しました。これによって、エラーを解決できます。
さいごに
Laravel11からの変更点については、下記記事にまとめています。
今回のデータベース以外にも各種変更があります。ご興味あれば、こちらも併せてご覧ください。



コメント