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

新手上路,请多包涵

我有一张桌子,里面有一列“酒店”。该项目是在 Laravel 5.4 中创建的,所以我使用了 Migrations。

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

这是 MYSQL VARCHAR (50)。它工作得很好,因为当我开发时,我使用了短的酒店名称,例如 “HILTON NEW YORK 5 ”*。

现在项目正在生产中,客户问为什么他们不能输入长的酒店名称。我用 “Long long long long long long long long long long andvery-very-very long hotel name 5 stars” 这样的模拟酒店名称对其进行了测试

它给了我一个错误:

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

我在我的 Sequel Pro 中打开了数据库并更改了它

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

每次更改后,我都使用相同的“Long long long long long long long long long long and very-very-very long hotel name 5 starts”对其进行测试,并得到相同的错误(见上文)。

我已经检查了列的类型

SHOW FIELDS FROM table_name

它给了我

领域 |类型

酒店 |文本

所以该字段的类型确实是“文本”(65 535 个字符)。

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

将不胜感激任何帮助。


更新: 我发现它实际上将那个长酒店名称保存在数据库中。但是用户每次提交表单后仍然会遇到这个烦人的错误……

原文由 Sergej Fomin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

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

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

原文由 Alexey Mezenin 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果 “文本” 数据类型不起作用,则将数据库中列的数据类型更改为 长文本”

原文由 Rohit Kothari 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题