Después de cambiar el tipo de datos de una columna MySql para almacenar los identificadores de llamadas de Twilio (34 cadenas de caracteres), trato de cambiar manualmente los datos en esa columna con:
update calls
set incoming_Cid='CA9321a83241035b4c3d3e7a4f7aa6970d'
where id='1';
Sin embargo, aparece un error que no tiene sentido, ya que el tipo de datos de la columna se modificó correctamente.
| Level ||| Code | Message
| Warning | 1265 | Data truncated for column 'incoming_Cid' at row 1
ALTER TABLES calls MODIFY incoming_Cid STRING;
es lo que hice.STRING
no es un tipo MySQL. ¿Cuál es su motor de base de datos?Respuestas:
Tu problema es que de momento tu
incoming_Cid
columna define comoCHAR(1)
debe serCHAR(34)
.Para solucionar esto, simplemente emita este comando para cambiar la longitud de sus columnas de 1 a 34
ALTER TABLE calls CHANGE incoming_Cid incoming_Cid CHAR(34);
Aquí está la demostración de SQLFiddle
fuente
Tuve el mismo problema debido a una columna de la tabla que se definió como ENUM ('x', 'y', 'z') y luego estaba tratando de guardar el valor 'a' en esta columna, así obtuve el mencionado error.
Resuelto modificando la definición de la columna de la tabla y el valor agregado 'a' en el conjunto de enumeración.
fuente
Al emitir esta declaración:
ALTER TABLES call MODIFY incoming_Cid CHAR;
... omitiste el parámetro de longitud. Por lo tanto, su consulta fue equivalente a:
ALTER TABLE calls MODIFY incoming_Cid CHAR(1);
Debe especificar el tamaño del campo para tamaños superiores a 1:
ALTER TABLE calls MODIFY incoming_Cid CHAR(34);
fuente
A menudo puede recibir este mensaje cuando está haciendo algo como lo siguiente:
REPLACE INTO table2 (SELECT * FROM table1);
En nuestro caso resultó en el siguiente error:
El problema resultó ser una desalineación de la columna que resultó en un
tinyint
intento de ser almacenado en undatetime
campo o viceversa.fuente
En mi caso se trató de una tabla con un ENUM que acepta los días de la semana como enteros (0 a 6). Al insertar el valor 0 como un número entero, recibí el mensaje de error "Datos truncados para la columna ...", así que para solucionarlo tuve que convertir el número entero en una cadena. Entonces en lugar de:
$item->day = 0;
Tenía que hacer;
$item->day = (string) 0;
Parece una tontería lanzar el cero así, pero en mi caso fue en una fábrica de Laravel, y tuve que escribirlo así:
$factory->define(App\Schedule::class, function (Faker $faker) { return [ 'day' => (string) $faker->numberBetween(0, 6), // ]; });
fuente
cuando intenté importar csv a mysql por primera vez, obtuve el mismo error, y luego descubrí que la tabla mysql que creé no tiene la longitud de caracteres del campo csv de importación, así que si es la primera vez que importa csv
varchar
otext
, no mezclarint
u otros valores.Entonces, ya puedes irte.
fuente
Tuve el mismo problema, con un campo de base de datos con el tipo "SET", que es un tipo de enumeración.
Intenté agregar un valor que no estaba en esa lista.
El valor que intenté agregar tenía el valor decimal 256, pero la lista de enumeración solo tenía 8 valores.
Así que solo tuve que agregar el valor adicional al campo.
La lectura de esta entrada de documentación me ayudó a comprender el problema.
SET Member Decimal Value Binary Value 'a' 1 0001 'b' 2 0010 'c' 4 0100 'd' 8 1000
fuente