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】
1 |
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) assize
, table_comment ascomment
, engine asengine
, table_collation ascollation
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】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
'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からの変更点については、下記記事にまとめています。
今回のデータベース以外にも各種変更があります。ご興味あれば、こちらも併せてご覧ください。