Данные усечены для столбца?
После изменения типа данных столбца 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
Ответы
Ответ 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),
//
];
});