114

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

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

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

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

4

7 回答 7

107

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

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

ALTER TABLE calls CHANGE incoming_Cid incoming_Cid CHAR(34);

这是SQLFiddle演示

于 2013-08-06T21:13:48.790 回答
18

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

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

于 2017-04-01T08:37:02.413 回答
9

通过发布此声明:

ALTER TABLES call MODIFY incoming_Cid CHAR;

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

ALTER TABLE calls MODIFY incoming_Cid CHAR(1);

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

ALTER TABLE calls MODIFY incoming_Cid CHAR(34);
于 2013-08-06T21:18:15.393 回答
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字段中,反之亦然。

于 2014-12-10T19:22:28.947 回答
1

当我第一次尝试将 csv 导入 mysql 时,我得到了同样的错误,然后我发现我创建的 mysql 表没有导入 csv 字段的字符长度,所以如果这是第一次导入 csv

  1. 提供更多字符长度是个好主意。
  2. 将所有字段标记为varcharor text,不要混合int或其他值。

那么你就可以走了。

于 2020-02-25T17:19:52.523 回答
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),
        //
    ];
});
于 2019-01-18T17:43:49.540 回答
1

我遇到了同样的问题,数据库字段类型为“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

所以我只需要在字段中添加附加值。

在此处输入图像描述

阅读此文档条目有助于我理解问题。

MySQL 以数字方式存储 SET 值,存储值的低位对应于第一个集合成员。如果您在数字上下文中检索 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'。

于 2019-11-14T14:36:49.567 回答