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
(我找不到类似的情况),但它也可能是您的数据库实例上的设置。
相关源码:
这是我在迁移文件中的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
(我找不到类似的情况),但它也可能是您的数据库实例上的设置。
相关源码: