在 Db 中创建的 Laravel 迁移布尔字段就像小整数

Ste*_*one 5 php laravel laravel-migrations

我在 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');
    });
Run Code Online (Sandbox Code Playgroud)

所需的字段定义为布尔值,但在 db (MySql) 中创建为 tinyint。这怎么可能?

Rez*_*azi 7

Tinyint 与boolean. Tinyint是大小等于 1 个八位字节的整数。创建列设置为booleandb 时,将其创建为大小为1 bit. 从而使其成为可能的值01哪个是boolean.


来自 MySQL 文档

BOOL, BOOLEAN
Run Code Online (Sandbox Code Playgroud)

这些类型是 的同义词TINYINT(1)。的值zero被考虑false。考虑非零值true

数字类型概述

  • 还有一个问题是 TINYINT(1) 的大小不是“1 位”而是“1 字节”!只有 `BIT(1)` 真正具有 `1 bit` 的大小 (2认同)