Laravelで文字列を格納する時、「どのデータ型を使えばいいんだろう」と悩んだら、255文字以内なら string, 16384文字以内ならtext, それ以上ならlongTextを使うと良いでしょう。
【Laravelデータ型文字数制限目安表】
データ型 | 文字数制限目安 |
string | 255 |
text | 16384 |
longText | 1GB |
longTextの出番はあんまりないかな、と思いますが。
なぜこのような文字数になるのか? それぞれの基準の計算方法を解説します。
Laravelのstring型について
Laravelのstring型は、MySQLのvarchar型となります。
例えば次のようにマイグレーションファイルでstring型を指定してデータベースを作るとします。
1 2 3 4 5 6 7 8 9 10 |
public function up() { Schema::create('dangos', function (Blueprint $table) { $table->id(); $table->string('dango'); $table->integer('number'); $table->date('date')->nullable(); $table->timestamps(); }); } |
データベーステーブルには、dangoカラムデータ型は varchar(255) と設定されています。
つまり、string型を長さ指定なしで使うと、255文字まで格納できることになります。日本語でも英語でも同じです。
それほど長い文章には適さないので、string型は件名やタイトル、名前といった情報に使われます。
Laravelのtext型について
Laravelのtext型は、MySQLのtext型となります。
text型で保存できる文字数は 65,535バイトまで。英数字であれば、65,535文字格納できます。
text型は文字数ではなく、バイトで指定します。
日本語の場合には一文字を格納するのに4バイト使う可能性があり*、65,535を4で割った16,384文字程度までしか保存できません。
【text型で保存できる日本語の文字数の計算】
本文部分など、ある程度長い文章を入れるときにはtext型が適しています。
*文字によって何文字使うかは異なります。
LaravelのlongText型について
Laravelのtext型は、MySQLのlongText型となります。
これは4GBバイトまで格納できます。日本語であっても、1GBまで入れることができます。
【longText型で保存できる日本語の文字数の計算】
かなりの文字数に思われますが、タグなども含む文章の場合には、わりと多くの文字が使われます。なので、longTextが使用されたりします。ちなみに、Wordpressの投稿の本文にはlongtext型が使われています。
またlongText型は画像をbase64エンコードしてhtmlテキストの中に埋め込むような時に使えます。
おまけ1:string型で長さを指定する場合
ちなみにstring型は、長さを指定して使うことも可能です。
Laravelの公式マニュアルには、次のように書いてあります。
string
メソッドは、指定された長さのVARCHAR
カラムを作成します。
1 $table->string('name', 100);
参考:https://readouble.com/laravel/8.x/ja/migrations.html
このようにすると65,535バイトまで格納できるかと思われますが、実験していません^^;
多めの文字数を入れる場合には、text型を使っています。
おまけ2:長さの指定にはバリデーションも使えます
なお、「何文字以内しか入力してほしくない」場合には、バリデーションを使うと便利です。
たとえば 「name属性の値は、20文字以内しか入れてほしくない」という場合、コントローラーのstoreメソッドなどに、次のようにバリデーションを設定できます。
1 2 3 |
$inputs = $request->validate([ 'name'=>'max:20', ]); |
さいごに
「長さがどれぐらいになるか分からない。」という場合は、テーブルを作る際、文字を多めに格納できるデータ型を選んでおくと便利かなと思います。
文字数が足りないとエラーになっちゃうので。
Laravelのデータ型はこちらの記事も参考になります。