Логическое поле миграции Laravel, созданное в Db как крошечное целое число

Я написал миграцию в 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');
    });

требуемое поле определяется как логическое, но в db (MySql) создается как tinyint. Как это возможно?


person Stefano Maglione    schedule 17.05.2017    source источник
comment
Вы можете перейти по ссылке ниже для большей ясности: /   -  person bishop    schedule 24.12.2018


Ответы (1)


Tinyint — это то же самое, что и boolean. Tinyint — целое число размером, равным 1 октету. При создании столбца, установленного как boolean, база данных создает его как tinyint с размером 1 bit. Таким образом, возможны значения 0 и 1, которые являются boolean.


Из документации MySQL

BOOL, BOOLEAN

Эти типы являются синонимами для TINYINT(1). Значение zero считается false. Ненулевые значения считаются true

Обзор числового типа

person Rezrazi    schedule 17.05.2017
comment
Этот вопрос не связан с mysql. Это связано с миграцией laravel - person Blip; 17.12.2018
comment
Также есть проблема, что TINYINT(1) имеет размер не 1 bit, а 1 byte! Только BIT(1) имеют размер 1 bit - person tomas.lang; 07.06.2019
comment
Разве это не даже 1 байт? Но что-то вроде того, что если вы экспортируете его в формат, совместимый с мейнфреймом, это будет напечатано как 1 символ. Например. обрезано до последнего десятичного символа: от 0 до 9. Вы не увидите этого при обычных запросах. - person Henk Poley; 10.09.2020
comment
Интересный !!! - person aagjalpankaj; 11.07.2021