Après avoir changé le type de données d'une colonne MySql afin de stocker les identifiants d' appel Twilio (34 chaînes de caractères), j'essaie de modifier manuellement les données dans cette colonne avec:
update calls
set incoming_Cid='CA9321a83241035b4c3d3e7a4f7aa6970d'
where id='1';
Cependant, j'obtiens une erreur qui n'a pas de sens vu que le type de données de la colonne a été correctement modifié?
| Level ||| Code | Message
| Warning | 1265 | Data truncated for column 'incoming_Cid' at row 1
ALTER TABLES calls MODIFY incoming_Cid STRING;
c'est ce que j'ai fait.STRING
n'est pas un type MySQL. Quel est votre moteur de base de données?Réponses:
Votre problème est qu'au moment où votre
incoming_Cid
colonne est définie commeCHAR(1)
quand elle devrait l'êtreCHAR(34)
.Pour résoudre ce problème, lancez simplement cette commande pour changer la longueur de vos colonnes de 1 à 34
ALTER TABLE calls CHANGE incoming_Cid incoming_Cid CHAR(34);
Voici la démo de SQLFiddle
la source
J'ai eu le même problème à cause d'une colonne de table qui était définie comme ENUM ('x', 'y', 'z') et plus tard, j'essayais d'enregistrer la valeur 'a' dans cette colonne, j'ai donc obtenu le mentionné Erreur.
Résolu en modifiant la définition de la colonne de table et la valeur ajoutée «a» dans l'ensemble d'énumérations.
la source
En émettant cette déclaration:
ALTER TABLES call MODIFY incoming_Cid CHAR;
... vous avez omis le paramètre de longueur. Votre requête était donc équivalente à:
ALTER TABLE calls MODIFY incoming_Cid CHAR(1);
Vous devez spécifier la taille du champ pour les tailles supérieures à 1:
ALTER TABLE calls MODIFY incoming_Cid CHAR(34);
la source
Vous pouvez souvent recevoir ce message lorsque vous faites quelque chose comme ce qui suit:
REPLACE INTO table2 (SELECT * FROM table1);
Résultat dans notre cas l'erreur suivante:
Le problème s'est avéré être un désalignement de colonne qui a entraîné une
tinyint
tentative de stockage dans undatetime
champ ou vice versa.la source
Dans mon cas, c'était une table avec un ENUM qui accepte les jours de la semaine comme des entiers (0 à 6). Lors de l'insertion de la valeur 0 en tant qu'entier, j'ai reçu le message d'erreur "Données tronquées pour la colonne ...", donc pour le réparer, j'ai dû convertir l'entier en une chaîne. Donc au lieu de:
$item->day = 0;
Je devais faire;
$item->day = (string) 0;
Cela a l'air idiot de lancer le zéro comme ça, mais dans mon cas, c'était dans une usine Laravel, et j'ai dû l'écrire comme ceci:
$factory->define(App\Schedule::class, function (Faker $faker) { return [ 'day' => (string) $faker->numberBetween(0, 6), // ]; });
la source
quand j'ai essayé d'importer csv dans mysql pour la première fois, j'ai eu la même erreur, puis j'ai compris que la table mysql que j'avais créée n'avait pas la longueur de caractère du champ csv importé, donc si c'est la première fois que vous importez du csv
varchar
outext
, ne pas mélangerint
ou d'autres valeurs.Alors tu peux y aller.
la source
J'ai eu le même problème, avec un champ de base de données avec le type "SET" qui est un type enum.
J'ai essayé d'ajouter une valeur qui ne figurait pas dans cette liste.
La valeur que j'ai essayé d'ajouter avait la valeur décimale 256, mais la liste d'énumération n'avait que 8 valeurs.
Je devais donc juste ajouter la valeur supplémentaire au champ.
La lecture de cette entrée de documentation m'a aidé à comprendre le problème.
SET Member Decimal Value Binary Value 'a' 1 0001 'b' 2 0010 'c' 4 0100 'd' 8 1000
la source