MySQLとLaravelデータ型

LaravelとMySQLを使っていて、データ型の対応とデータの範囲を忘れがちなので簡易表にまとめました。

文字型

Laravel Method MySQL Type Range
char() char(255) 0~255 characters
string() varchar(255) 0~65,535 bytes
text() text 0~65,535 characters

char(M), varchar(M)Mはカラムの最大長を文字数で表す varcharの範囲はバイトで、文字セットによって最大の文字数が変わるから注意

数値型

Laravel Method MySQLデータ型(option) Range
integer ⭐️ int(11) -約21億 to 約21億(10桁)
unsignedInteger int(10) unsigned 0 to 約42(10桁)
tinyInteger tinyint(4) -128 to 127
unsignedTinyInteger tinyint(3) unsigned 0 to 255
smallInteger smallint(6) -32768 to 32767(5桁)
unsignedSmallInteger smallint(5) unsigned 0 to 65535(5桁)
mediumInteger mediumint(9) -約838万 to 約838万(7桁)
unsignedMediumInteger mediumint(8) unsigned 0 to 約1677万(8桁)
bigInteger bigint(20) -約922京 to 約922京(19桁)
unsignedBigInteger bigint(20) unsigned 0 to 約1844京(20桁)

int(11)の11は表示幅の指定(ZEROFILLオプション) 指定した桁数に揃えるために、数値の左側に不足している桁数分「0」で埋める処理 (Laravelで作成したintカラムなど、mysqlで確認してもZEROFILLオプションが付いている訳ではない)

Laravel Migration

LaravelのMigrationファイルでそれぞれのデータ型カラムを作る例

public function up(): void
{
    Schema::create('types', function (Blueprint $table) {
        $table->id();
        $table->string('string');
        $table->char('char');
        $table->text('text');
        $table->tinyText('tinyText');
        $table->integer('integer');
        $table->unsignedInteger('unsignedInteger');
        $table->tinyInteger('tinyInteger');
        $table->unsignedTinyInteger('unsignedTinyInteger');
        $table->smallInteger('smallInteger');
        $table->unsignedSmallInteger('unsignedSmallInteger');
        $table->mediumInteger('mediumInteger');
        $table->unsignedMediumInteger('unsignedMediumInteger');
        $table->bigInteger('bigInteger');
        $table->unsignedBigInteger('unsignedBigInteger');
    });
}