Подтвердить что ты не робот

Данные усечены для столбца?

После изменения типа данных столбца MySql для хранения Twilio call ids (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

4b9b3361

Ответ 1

Ваша проблема в том, что на данный момент ваш столбец incoming_Cid определяется как CHAR(1), когда он должен быть CHAR(34).

Чтобы исправить это, просто выполните эту команду, чтобы изменить длину столбцов от 1 до 34

ALTER TABLE calls CHANGE incoming_Cid incoming_Cid CHAR(34);

Вот SQLFiddle демо

Ответ 2

Выдавая это утверждение:

ALTER TABLES call MODIFY incoming_Cid CHAR;

... вы пропустили параметр длины. Поэтому ваш запрос был эквивалентен:

ALTER TABLE calls MODIFY incoming_Cid CHAR(1);

Вы должны указать размер поля для размеров больше 1:

ALTER TABLE calls MODIFY incoming_Cid CHAR(34);

Ответ 3

Однако я получаю сообщение об ошибке, которое не имеет смысла, поскольку тип данных столбца был правильно изменен?

| 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 или наоборот.

Ответ 4

У меня была та же проблема из-за столбца таблицы, который был определен как ENUM ('x', 'y', 'z'), а позже я пытался сохранить значение 'a' в этот столбец, таким образом, я получил указанную ошибку.

Решено, изменив определение столбца таблицы и добавив значение 'a' в набор перечислений.

Ответ 5

В моем случае это была таблица с 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),
        //
    ];
});