列被截断的数据?

Zag*_*rug 68 mysql warnings twilio

在更改MySql列的数据类型以存储Twilio调用 ID(34个char字符串)之后,我尝试手动更改该列中的数据:

update calls 
   set incoming_Cid='CA9321a83241035b4c3d3e7a4f7aa6970d' 
 where id='1';
Run Code Online (Sandbox Code Playgroud)

但是,由于列的数据类型被正确修改,我得到一个没有意义的错误?

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

pet*_*erm 72

您的问题是,您的incoming_Cid列定义为CHAR(1)应该的时间CHAR(34).

要解决此问题,只需发出此命令即可将列的长度从1更改为34

ALTER TABLE calls CHANGE incoming_Cid incoming_Cid CHAR(34);
Run Code Online (Sandbox Code Playgroud)

这是SQLFiddle演示

  • 我正在为“ENUM”列发送字符串,而不是整数。 (2认同)

MTu*_*ash 8

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

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


Ran*_*eed 7

发表此声明:

ALTER TABLES call MODIFY incoming_Cid CHAR;
Run Code Online (Sandbox Code Playgroud)

...你省略了长度参数.因此,您的查询相当于:

ALTER TABLE calls MODIFY incoming_Cid CHAR(1);
Run Code Online (Sandbox Code Playgroud)

您必须为大于1的大小指定字段大小:

ALTER TABLE calls MODIFY incoming_Cid CHAR(34);
Run Code Online (Sandbox Code Playgroud)


Gra*_*ray 5

但是,由于列的数据类型被正确修改,我得到一个没有意义的错误?

| Level | Code | Msg | Warn | 12 | Data truncated for column 'incoming_Cid' at row 1
Run Code Online (Sandbox Code Playgroud)

当您执行以下操作时,通常可以收到此消息:

REPLACE INTO table2 (SELECT * FROM table1);
Run Code Online (Sandbox Code Playgroud)

在我们的案例中导致以下错误:

SQL Exception: Data truncated for column 'level' at row 1
Run Code Online (Sandbox Code Playgroud)

问题结果是列错位导致tinyint尝试存储在datetime字段中,反之亦然.