Laravel のマイグレーション時に指定したカラムタイプで実際に作成されるカラムのデータ型を調べてみた

Laravel では、マイグレーション時にカラムタイプを指定することで RDBMS の違いを意識せずにカラムを作成することができますが、実際に作成されるカラムのデータ型は、当然のことながら、各 RDBMS に存在するものとなります。そこで、Laravel のカラムタイプと実際に作成されるデータ型を確認してみることにします。

カラムタイプと作成されるデータ型の対応については、Illuminate\Database\Schema\Grammars 以下に RDBMS ごとのクラス(MySqlGrammar など)が置かれています。この記事ではバージョン6系について、MySQL、PostgreSQL、SQLite の3つの RDBMS における実装を確認します。

MySQLPostgreSQLSQLite
bigIntegerbigintbigintinteger
binaryblobbyteablob
booleantinyint(1)booleantinyint(1)
charcharcharvarchar
datedatedatedate
dateTimedatetimetimestampdatetime
decimaldecimaldecimalnumeric
doubledoubledouble precisionfloat
enumenumvarchar(255) check (“カラム名" in (“値1", “値2", …)varchar check (“カラム名" in (“値1", “値2", …)
floatdoubledouble precisionfloat
integerintintegerinteger
ipAddressvarchar(45)inetvarchar
jsonjsonjsontext
longTextlongtexttexttext
mediumIntegermediumintintegerinteger
mediumTextmediumtexttexttext
smallIntegersmallintsmallintinteger
stringvarcharvarcharvarchar
texttexttexttext
timetimetimetime
timestamptimestamptimestampdatetime
tinyIntegertinyintsmallintinteger

各 RDBMS の考え方のようなものも見えて、面白い調査結果となりました。

この記事を書いた人

グッドネイバー

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