更改MySql列的数据类型以存储Twilio call ID(34个char字符串)后,我尝试手动更改该列中的数据:
update calls
set incoming_Cid='CA9321a83241035b4c3d3e7a4f7aa6970d'
where id='1';
然而,由于列的数据类型被正确修改,我得到一个没有意义的错误?
| Level ||| Code | Message
| Warning | 1265 | Data truncated for column 'incoming_Cid' at row 1
答案 0 :(得分:68)
您的问题是,incoming_Cid
列定义为CHAR(1)
时应该是CHAR(34)
。
要解决此问题,只需发出此命令即可将列的长度从1更改为34
ALTER TABLE calls CHANGE incoming_Cid incoming_Cid CHAR(34);
这是 SQLFiddle 演示
答案 1 :(得分:6)
发表此声明:
ALTER TABLES call MODIFY incoming_Cid CHAR;
...你省略了length参数。因此,您的查询等同于:
ALTER TABLE calls MODIFY incoming_Cid CHAR(1);
您必须为大于1的尺寸指定字段大小:
ALTER TABLE calls MODIFY incoming_Cid CHAR(34);
答案 2 :(得分:5)
然而,由于列的数据类型被正确修改,我得到一个没有意义的错误?
| Level | Code | Msg | Warn | 12 | Data truncated for column 'incoming_Cid' at row 1
当您执行以下操作时,通常可以收到此消息:
REPLACE INTO table2 (SELECT * FROM table1);
在我们的案例中导致以下错误:
SQL Exception: Data truncated for column 'level' at row 1
问题原因是列错位导致tinyint
尝试存储在datetime
字段中,反之亦然。
答案 3 :(得分:4)
我遇到了同样的问题,因为表格列定义为ENUM(' x',' y'' z')以及之后的I我试图挽救价值' a'进入这一栏,因此我得到了上述错误。
通过更改表格列定义和附加值解决问题' a'进入枚举集。
答案 4 :(得分:1)
在我的情况下,它是一个带有ENUM的表,该表接受星期几作为整数(0到6)。当将值0插入为整数时,我得到了错误消息“数据被截断为列...”,因此要修复它,我必须将整数转换为字符串。所以代替:
$item->day = 0;
我必须做;
$item->day = (string) 0;
像这样强制转换为零看起来很愚蠢,但就我而言,它在Laravel工厂中,我不得不这样写:
$factory->define(App\Schedule::class, function (Faker $faker) {
return [
'day' => (string) $faker->numberBetween(0, 6),
//
];
});
答案 5 :(得分:1)
当我第一次尝试将csv导入mysql时,遇到了同样的错误,然后我发现我创建的mysql表没有导入csv字段的字符长度, 所以如果是第一次导入csv
varchar
或text
,不要混合int
或其他值。那你很好。
答案 6 :(得分:0)
我遇到同样的问题,数据库类型为枚举类型“ SET”。
我试图添加一个不在该列表中的值。
我尝试添加的值的十进制值为256,但枚举列表只有8个值。
1: 1 -> A
2: 2 -> B
3: 4 -> C
4: 8 -> D
5: 16 -> E
6: 32 -> F
7: 64 -> G
8: 128 -> H
所以我只需要向该字段添加附加值即可。
阅读此documentation条目有助于我理解问题。
MySQL以数字形式存储SET值,其中的低位 对应于第一组成员的存储值。如果您检索 在数字上下文中设置值,获取的值已设置位 对应于组成列值的集合成员。对于 例如,您可以像这样从SET列中检索数值:
mysql> SELECT set_col+0 FROM tbl_name; If a number is stored into a
如果将数字存储到SET列中,则在 数字的二进制表示形式确定集合中的成员 列值。对于指定为SET('a','b','c','d')的列, 成员具有以下十进制和二进制值。
SET Member Decimal Value Binary Value
'a' 1 0001
'b' 2 0010
'c' 4 0100
'd' 8 1000
如果您为此列分配值9,则二进制值为1001,因此 选择第一和第四SET值成员'a'和'd'并 结果值为“ a,d”。