我有一张桌子,里面有一列“酒店”。该项目是在 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 许可协议
您需要创建一个新的迁移,使用
composer du
命令注册它并运行php artisan migrate
命令来更改列的类型: