2013-08-06 208 views
39

以便存储Twilio call IDS(34名字符的字符串)改变一个MySQL列的数据类型后,我尝试用手动更改该列中的数据:数据被截断列吗?

update calls 
    set incoming_Cid='CA9321a83241035b4c3d3e7a4f7aa6970d' 
where id='1'; 

但是我得到其中没有按”错误当列的数据类型被正确修改时,有意义吗?

| Level ||| Code | Message | Warning | 1265 | Data truncated for column 'incoming_Cid' at row 1

+1

修改后的确切数据类型是什么? –

+0

您确定该列为该长度的文本指定了足够的空间吗? –

+0

'ALTER TABLES调用修改incoming_Cid STRING;'是我所做的。 – Zagstrug

回答

35

您的问题是,在目前的incoming_Cid列定义为CHAR(1)当它应该是CHAR(34)

为了解决这个问题刚刚发出此命令从1你列的长度改为34

ALTER TABLE calls CHANGE incoming_Cid incoming_Cid CHAR(34); 

这里是SQLFiddle演示

6

通过发出这样的说法:

ALTER TABLES call MODIFY incoming_Cid CHAR; 

...你省略了长度参数。您的查询因此等效于:

ALTER TABLE calls MODIFY incoming_Cid CHAR(1); 

必须为尺寸大于1指定字段大小:

ALTER TABLE calls MODIFY incoming_Cid CHAR(34); 
2

However I get an error which doesn't make sense seeing as the column's data type was properly modified?

| 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场,反之亦然。

2

我有同样的问题,因为表列被定义为ENUM('x','y','z'),后来我试图将值'a'保存到此列中,因此我得到了提到的错误。

通过更改表列定义并将值“a”添加到枚举集中解决。