Laravel migration boolean field created in Db like tiny integer
17,877
Tinyint is the same as boolean
. Tinyint
is an integer of size equal to 1 octet. When creating the column set as boolean
the the db creates it as a tinyint with a size of 1 bit
. Thus making it's possible values 0
and 1
which is a boolean
.
From MySQL documentation
BOOL, BOOLEAN
These types are synonyms for TINYINT(1)
. A value of zero
is considered false
. Nonzero values are considered true
Author by
Stefano Maglione
Senior Software Engineer experienced in software analysis, design and development.
Updated on June 23, 2022Comments
-
Stefano Maglione almost 2 years
I wrote a migration in Laravel:
Schema::create('test', function (Blueprint $table) { // $table->increments('id'); $table->string('city','30')->unique(); $table->string('car','30')->unique(); $table->boolean('required'); $table->string('street','100')->nullable(); $table->json('files'); $table->timestamp('created_at'); });
the field required is defined as boolean but in the db (MySql) is created as tinyint. How is it possible?
-
Blip over 5 yearsThis question is not related to mysql. It is related to laravel migration
-
tomas.lang almost 5 yearsAlso there is problem that TINYINT(1) doesn't have a size of
1 bit
but1 byte
! OnlyBIT(1)
have really size of a1 bit
-
Henk Poley over 3 yearsIsn't it not even 1 byte? But something like "in case you export it to a mainframe compatible format, this will be printed as 1 character". E.g. trimmed to the last decimal character: 0 to 9. You won't see that during normal queries.