Laravel:字符串数据,右截断:1406列

时间:2018-01-27 16:26:36

标签: php mysql laravel text types

我有一张带有'hotel'列的桌子。该项目是在Laravel 5.4中创建的,因此我使用了迁移。

    $table->string('hotel', 50);

这是MYSQL VARCHAR(50)。它运作良好,因为当我开发时,我使用了短名称,如“HILTON NEW YORK 5 ”*。

现在该项目已投入生产,客户询问为何他们无法输入长酒店名称。我用这样一个模拟的酒店名称进行了测试,因为“很长很长很长很长很长很长很长的酒店名称5星”

它给了我一个错误:

  

“SQLSTATE [22001]:字符串数据,右截断:1406数据太长了   第1行的“酒店”栏目“

我在Sequel Pro中打开了数据库并对其进行了更改

  • 首先到VARCHAR(255)
  • 然后到TEXT

每次更改后,我都会使用相同的“Long long long long long long long long long,非常非常非常长的酒店名称5 start”进行测试,并得到相同的错误(见上文)。

我用

检查了列的类型
SHOW FIELDS FROM table_name

它给了我

  

字段|型

     

酒店|文本

因此字段的类型确实是“文本”(65 535个字符)。

也许它与Laravel Migration文件(见上文)有某种关联,我在开始时设置了VARCHAR(50)?但我无法在生产中重新运行迁移,因为该表现在有数据。

感谢任何帮助。

更新 我发现它实际上在DB中保存了那么长的酒店名称。但是每次提交表单后,用户仍然会收到这个恼人的错误......

9 个答案:

答案 0 :(得分:9)

您需要创建一个新的迁移,使用composer du命令注册它并运行php artisan migrate命令来更改列的类型:

Schema::table('the_table_name', function (Blueprint $table) {
    $table->string('hotel', 255)->change();
});

答案 1 :(得分:4)

在您的本地开发中,尝试将列类型更改为:

$table->longText('columnName')

来自您的迁移文件。那为我解决了。但是,如果您已经上线,则按照Alexey的建议创建一个新的迁移,然后使用longText()列类型。

答案 2 :(得分:1)

将列的类型从string更改为text

然后使用php artisan migrate:refesh

运行迁移刷新

答案 3 :(得分:1)

此错误的解决方法 "SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'hotel' at row 1" 打开Mysql并点击该列的furent中的更改按钮并使长度/值= 111

答案 4 :(得分:0)

将列的数据类型从字符串更改为文本,并且不给出长度。

答案 5 :(得分:0)

将列的数据类型从字符串更改为文本,并且不给出长度。

$table->text('hotel')->change();

答案 6 :(得分:0)

我将图片存储为text64上的base64,所以出现了SQL错误:

SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'picture' at row 1 

我以

的身份进行了迁移
$table->text('picture')

然后我将列图片更改为:

$table->mediumText('picture')

我意识到text列只能存储64 KB

TEXT:65,535个字符-64 KB MEDIUMTEXT:16,777,215-16 MB 长文本:4,294,967,295个字符-4 GB

有关更多信息,请访问:understanding-strorage-sizes-for-mysql-text-data-types

答案 7 :(得分:0)

如果'text'数据类型不起作用

,将数据库中列的数据类型更改为'longtext'

答案 8 :(得分:0)

public function up()
{
    Schema::table('news', function (Blueprint $table) {
        $table->text('content')->change();
    });
}

public function down()
{
    Schema::table('news', function (Blueprint $table) {
        $table->string('content', 65536)->change();
    });
}