Laravel のマイグレーション時に指定したカラムタイプで実際に作成されるカラムのデータ型を調べてみた
Laravel では、マイグレーション時にカラムタイプを指定することで RDBMS の違いを意識せずにカラムを作成することができますが、実際に作成されるカラムのデータ型は、当然のことながら、各 RDBMS に存在するものとなります。そこで、Laravel のカラムタイプと実際に作成されるデータ型を確認してみることにします。
カラムタイプと作成されるデータ型の対応については、Illuminate\Database\Schema\Grammars
以下に RDBMS ごとのクラス(MySqlGrammar など)が置かれています。この記事ではバージョン6系について、MySQL、PostgreSQL、SQLite、SQL Server の4つの RDBMS における実装を確認します。
カラムタイプ | MySQL | PostgreSQL | SQLite | SQL Server |
---|---|---|---|---|
bigInteger | bigint | bigint | integer | bigint |
binary | blob | bytea | blob | varbinary(max) |
boolean | tinyint(1) | boolean | tinyint(1) | bit |
char | char | char | varchar | nchar |
date | date | date | date | date |
dateTime | datetime | timestamp | datetime | datetime または datetime2 |
decimal | decimal | decimal | numeric | decimal |
double | double | double precision | float | float |
enum | enum | varchar(255) check (“カラム名" in (“値1", “値2", …) | varchar check (“カラム名" in (“値1", “値2", …) | nvarchar(255) check (“カラム名" in ( “値1", “値2", … )) |
float | double | double precision | float | float |
integer | int | integer | integer | int |
ipAddress | varchar(45) | inet | varchar | nvarchar(45) |
json | json | json | text | nvarchar(max) |
longText | longtext | text | text | nvarchar(max) |
mediumInteger | mediumint | integer | integer | int |
mediumText | mediumtext | text | text | nvarchar(max) |
smallInteger | smallint | smallint | integer | smallint |
string | varchar | varchar | varchar | nvarchar |
text | text | text | text | nvarchar(max) |
time | time | time | time | time |
timestamp | timestamp | timestamp | datetime | datetime または datetime2 |
tinyInteger | tinyint | smallint | integer | tinyint |
year | year | integer | integer | int |
各 RDBMS の考え方のようなものも見えて、面白い調査結果となりました。特に SQL Server は、Unicode の文字列を扱うために nvarchar を使うのが特徴的ですね。
ディスカッション
コメント一覧
まだ、コメントがありません