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 型に読み替えられるので、エラーを回避することができます。

この記事を書いた人
グッドネイバー

“ Webに悩むお客さまの「よき隣人」でありたい ” をモットーに、Web システム開発(主に Laravel)、Web マーケティング支援の仕事をしています。お仕事のご依頼・ご相談はこちらからお気軽にどうぞ。