Depois de alterar o tipo de dados de uma coluna MySql para armazenar ids de chamada Twilio (strings de 34 caracteres), tento alterar manualmente os dados nessa coluna com:
update calls
set incoming_Cid='CA9321a83241035b4c3d3e7a4f7aa6970d'
where id='1';
No entanto, recebo um erro que não faz sentido, visto que o tipo de dados da coluna foi modificado corretamente.
| Level ||| Code | Message
| Warning | 1265 | Data truncated for column 'incoming_Cid' at row 1
ALTER TABLES calls MODIFY incoming_Cid STRING;
é o que eu fiz.STRING
não é um tipo de MySQL. Qual é o seu mecanismo de banco de dados?Respostas:
Seu problema é que no momento sua
incoming_Cid
coluna definiu comoCHAR(1)
deveria estarCHAR(34)
.Para corrigir isso, basta emitir este comando para alterar o comprimento das colunas de 1 para 34
ALTER TABLE calls CHANGE incoming_Cid incoming_Cid CHAR(34);
Aqui está a demonstração SQLFiddle
fonte
Eu tive o mesmo problema por causa de uma coluna da tabela que foi definida como ENUM ('x', 'y', 'z') e mais tarde eu estava tentando salvar o valor 'a' nesta coluna, então eu obtive o mencionado erro.
Resolvido alterando a definição da coluna da tabela e valor agregado 'a' no conjunto enum.
fonte
Ao emitir esta declaração:
ALTER TABLES call MODIFY incoming_Cid CHAR;
... você omitiu o parâmetro de comprimento. Sua consulta foi, portanto, equivalente a:
ALTER TABLE calls MODIFY incoming_Cid CHAR(1);
Você deve especificar o tamanho do campo para tamanhos maiores que 1:
ALTER TABLE calls MODIFY incoming_Cid CHAR(34);
fonte
Muitas vezes, você pode receber essa mensagem quando está fazendo algo como o seguinte:
REPLACE INTO table2 (SELECT * FROM table1);
Resultou em nosso caso no seguinte erro:
O problema acabou por ser o desalinhamento da coluna que resultou na
tinyint
tentativa de ser armazenado em umdatetime
campo ou vice-versa.fonte
No meu caso era uma tabela com um ENUM que aceita os dias da semana como inteiros (0 a 6). Ao inserir o valor 0 como um inteiro, recebi a mensagem de erro "Dados truncados para a coluna ...", então, para corrigi-lo, tive que converter o inteiro em uma string. Então, em vez de:
$item->day = 0;
Eu tive que fazer;
$item->day = (string) 0;
Parece bobagem lançar o zero assim, mas no meu caso foi em uma fábrica do Laravel e tive que escrever assim:
$factory->define(App\Schedule::class, function (Faker $faker) { return [ 'day' => (string) $faker->numberBetween(0, 6), // ]; });
fonte
quando tentei importar o csv para o mysql pela primeira vez, obtive o mesmo erro e, em seguida, descobri que a tabela do mysql que criei não tem o comprimento de caracteres do campo csv de importação, então, se for a primeira vez, importando csv
varchar
outext
, não combineint
ou outros valores.então você está pronto para ir.
fonte
Eu tive o mesmo problema, com um campo de banco de dados com o tipo "SET" que é um tipo de enum.
Tentei adicionar um valor que não estava nessa lista.
O valor que tentei adicionar tinha o valor decimal 256, mas a lista de enum tinha apenas 8 valores.
Então, eu apenas tive que adicionar o valor adicional ao campo.
Ler esta entrada da documentação me ajudou a entender o problema.
SET Member Decimal Value Binary Value 'a' 1 0001 'b' 2 0010 'c' 4 0100 'd' 8 1000
fonte