Laravel - 为什么保存 CHAR 列时尾随有空格?

Laravel - Why a CHAR column is being saved with trailing whitespace?

这是我在迁移文件中的up()方法:

    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->char('rank')->nullable();
        });
    }

table users 已经存在,我正在添加这个字符列。

在控制器和 blade 中,我只设置了 1 个字符的值。

示例: 我在控制器上设置 $user->value = 'A'; 并保存模型。然后,我尝试用 `{{ "Rank: " 显示值。 $用户->价值。 “!!!” }} 在 blade 上显示如下内容:

Rank: A                                                        !!!

为了解决这个问题,我在up()方法中将char的长度设置为1:

    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->char('rank',1)->nullable();
        });
    }

此外,如果我使用 $table->string('rank') 创建列,它也不会添加空格。

我能理解为什么我必须设置 char 列的长度,但如果我不设置它为什么会添加空格?

我已阅读 char and string 函数的文档,但找不到解释。

我正在使用 Laravel 6。

来自 MySQL documentation(我的粗体):

The length of a CHAR column is fixed to the length that you declare when you create the table. The length can be any value from 0 to 255. When CHAR values are stored, they are right-padded with spaces to the specified length. When CHAR values are retrieved, trailing spaces are removed unless the PAD_CHAR_TO_FULL_LENGTH SQL mode is enabled.

Laravel 的默认值是完整的 255,因此除非您指定大小为 1,否则它将用空格填充重置。

这没有回答为什么在像最后一行那样检索时没有删除它们。我会看看 Laravel 是否正在使用 PAD_CHAR_TO_FULL_LENGTH(我找不到类似的情况),但它也可能是您的数据库实例上的设置。

相关源码: