Laravelではマイグレーションファイルにデータベースのためにデータタイプを指定する必要があります。
毎回調べるのもメンドウなので、とりあえず、下記の6個を覚えておくと便利です。
データ型 | 説明(公式サイトより) | 使用時 |
integer | INTEGERカラム | 整数 |
string | VARCHARカラム | 名前など短めの文字列 |
text | TEXTカラム | コメントなどの文字列 |
longText | LONGTEXTカラム | かなり長い文字列 |
unsignedBigInteger
foreignId |
符号なしBIGINTカラム | 他のテーブルのID |
boolean | BOOLEANカラム | true/false |
分かりにくい部分だけ、少し説明をしていきますね。
Laravelの公式マニュアルのマイグレーションページはこちら。
integerタイプ
整数に便利なのがinteger。
マイグレートを実行すると、データベース(phpMyAdmin)上でInt(11)に自動変換されます。
11桁までの整数に使えます。
stringタイプ
たとえば、フォームに名前などいれてもらうときは string あたりが使えます。
マイグレートを実行すると、データベース(phpMyAdmin)上でvarchar(255)という形に自動変換されます。
最大文字数は255文字となります。
つまりstringに指定すると、デフォルトでは長いテキストデータは保存できません。
textタイプ
お問い合わせフォームや、通常の投稿であれば、textタイプ。
状況によって文字の長さは異なりますが、MySQLのページによると、text型が扱える文字数は6万5千文字程度。
最大長が 65,535 (216 − 1) 文字の
TEXT
カラム。値にマルチバイト文字が含まれる場合、有効な最大長は少なくなります。
*参考元:MySQL 文字列型の概要
デフォルトの文字セット(UTF-8 Unicode (utf8mb4))で日本語を保存する場合は、その4分の1程度となります。
longTextタイプ
かなり長くなりそうであったり、画像をbase64に変換するなど、通常ではないような文字数が予想される場合は、longTextが候補になります。
text型の65,000倍の長さを格納できます。
最大長が 4,294,967,295 または 4G バイト (232 − 1) 文字の
TEXT
カラム。値にマルチバイト文字が含まれる場合、有効な最大長は少なくなります。
*参考元:MySQL 文字列型の概要
unsignedBigIntegerタイプ
リレーションを作ったりして、他のテーブルのIDを入れる場合には、unsignedBigInteger を使います。
なぜなら、これがデフォルトのIDタイプだからです。
unsignedBigInteger については、下記でも解説しています。
なお、unsignedBigIntegerの代わりにforeignIdを使ってもOKです。
Laravel公式マニュアルには、次のように記載されています。
foreignId
メソッドはUNSIGNED BIGINT
カラムを作成します。
*参考:https://readouble.com/laravel/9.x/ja/migrations.html#column-method-foreignId
データ型に迷ったら
とりあえず、安全そうなほうを選んでおくことをおすすめします。
「そんなに長い文字列は入らないとおもうけど、stringで大丈夫かな」
と思ったら、長めのデータを保存できるtextを選んだほうが無難。
後からデータタイプを変えることもできますが、手間がかかります^^;
下記にデータタイプの変更方法を解説しているので「しまった!」というときには、参考にしてください。
Laravelの使い方は他の記事でも色々解説しているので、良かったら参考にしてください。
Laravelの使い方をいちから学びたい!と思ったら、学習サイト【Laravelの教科書】ご活用ください♪
*更新履歴*
-2022/03/18:foreignIdについての記載を追加しました