Laravel 11 で DB_CONNECTION=mariadb にするときの注意点
Laravel 11 から MariaDB のサポートが強化され、.env で DB_CONNECTION=mariadb
を設定することで、MariaDB に適した設定を使うことができるようになります。ドキュメントでは、MariaDB 10.3 以上に対応していると書かれていますが、実際に使ってみると不具合があったのでメモしておきます。
MariaDB 独自の実装は Illuminate/Database/Schema/Grammars/MariaDbGrammar.php
に書かれています。MySqlGrammar
クラスを拡張していて、ほぼ MySQL と変わらないのですが、重要なのは以下の部分。
protected function typeUuid(Fluent $column)
{
return 'uuid';
}
Laravel 側でカラムタイプを uuid に設定した場合に、mariadb で uuid 型を使用するように指定しています。しかしながら、MariaDB で uuid 型が利用できるようになるのはバージョン 10.7 からなのです(→ドキュメント)。このため、MariaDB 10.7 未満のサーバで DB_CONNECTION=mariadb
を設定し、カラムタイプが uuid のマイグレーションがあると、Unknown data type: `uuid`
のエラーになります。
この不具合、割と深刻で、まだ比較的現役で稼働しているであろう Ubuntu 22.04 で標準インストールされる MariaDB のバージョンが 10.6 のため、この不具合に遭遇することになります。
回避方法は DB_CONNECTION=mysql
を設定することです。設定することで
protected function typeUuid(Fluent $column)
{
return 'char(36)';
}
が適用され、char 型に読み替えられるので、エラーを回避することができます。
ディスカッション
コメント一覧
まだ、コメントがありません