Ser*_*min 12 php mysql text types laravel
我有一张带有'酒店'栏的桌子.该项目是在Laravel 5.4中创建的,因此我使用了迁移.
$table->string('hotel', 50);
Run Code Online (Sandbox Code Playgroud)
这是MYSQL VARCHAR(50).它工作得很好,因为在我开发时,我使用的短名称如"HILTON NEW YORK 5 "*.
现在该项目正在进行生产,客户询问他们为什么不能输入长酒店名称.我用这样一个模拟的酒店名称测试了它"长长很长很长很长很长很长的酒店名称5星"
它给了我一个错误:
"SQLSTATE [22001]:字符串数据,右截断:1406对于第1行的列'hotel',数据太长"
我在Sequel Pro中打开了数据库并进行了更改
在每次更改之后,我使用相同的"长长多长多长多长很长且非常非常长的酒店名称5开始"进行测试并得到相同的错误(见上文).
我已经检查了列的类型
SHOW FIELDS FROM table_name
Run Code Online (Sandbox Code Playgroud)
它给了我
领域| 类型
酒店| 文本
所以字段的类型确实是"文本"(65 535个字符).
也许它与Laravel Migration文件(见上文)有某种联系,我在开始时设置了VARCHAR(50)?但我无法在生产中重新运行迁移,因为该表现在有数据.
非常感谢任何帮助.
更新: 我发现它实际上在DB中保存了这么长的酒店名称.但是每次提交表单后用户仍然会遇到这个恼人的错误......
JDK*_*Ben 13
在您的本地开发中,尝试将列类型更改为:
$table->longText('columnName')
Run Code Online (Sandbox Code Playgroud)
从您的迁移文件。那为我解决了。但是,如果您已经上线,则按照 Alexey 的建议创建一个新的迁移,然后使用longText()列类型。
Ale*_*nin 10
您需要创建一个新的迁移,使用composer ducommand和run php artisan migrate命令注册它以更改列的类型:
Schema::table('the_table_name', function (Blueprint $table) {
$table->string('hotel', 255)->change();
});
Run Code Online (Sandbox Code Playgroud)
小智 7
我将图片作为 base64 存储在文本列上,因此出现 SQL 错误:
SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'picture' at row 1
Run Code Online (Sandbox Code Playgroud)
我的迁移是
$table->text('picture')
Run Code Online (Sandbox Code Playgroud)
然后我将列图片更改为:
$table->mediumText('picture')
Run Code Online (Sandbox Code Playgroud)
我发现文本列只能存储 64 KB
文本:65,535 个字符 - 64 KB 中文本:16,777,215 - 16 MB 长文本:4,294,967,295 个字符 - 4 GB
欲了解更多信息,请访问:understanding-strorage-sizes-for-mysql-text-data-types
| 归档时间: |
|
| 查看次数: |
31095 次 |
| 最近记录: |