【发布时间】:2018-07-06 18:24:59
【问题描述】:
我有一张桌子,里面有一列“酒店”。该项目是在 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 long andvery-very-very long hotel name 5 stars”这样的模拟酒店名称对其进行了测试
它给了我一个错误:
"SQLSTATE[22001]: 字符串数据,右截断:1406 数据太长 第 1 行的“酒店”列“
我在我的 Sequel Pro 中打开了数据库并更改了它
- 首先到 VARCHAR (255)
- 然后转文本
每次更改后,我都使用相同的“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 迁移文件(见上文)有关?但我无法在生产环境中重新运行迁移,因为该表现在有数据。
不胜感激。
更新: 我发现它实际上在数据库中保存了那个长酒店名称。但是用户每次提交表单后仍然会遇到这个烦人的错误......
【问题讨论】:
-
您当然可以创建迁移来更改字段类型。只要它是类似的东西,它应该不是问题。
-
和往常一样,在您的本地副本上试一试以防万一,但我不明白为什么它不起作用。
-
大家好。谢谢你。正如 Alexey 在下面的回答中解释的那样,我创建了一个新的迁移并运行它(在本地),但是每次提交表单时仍然会出现错误......:(
标签: php mysql laravel text types