web-dev-qa-db-fra.com

Données tronquées pour la colonne?

Après avoir modifié le type de données d'une colonne MySql afin de stocker appel Twilio ids (34 chaînes de caractères), j'essaie de modifier manuellement les données de cette colonne avec:

update calls 
   set incoming_Cid='CA9321a83241035b4c3d3e7a4f7aa6970d' 
 where id='1';

Cependant, j'obtiens une erreur qui n'a pas de sens puisque 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

64
Zagstrug

Votre problème est qu’au moment où votre colonne incoming_Cid est définie comme CHAR(1) alors qu’elle devrait être CHAR(34).

Pour résoudre ce problème, lancez 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 SQLFiddle

69
peterm

En publiant 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);
7
RandomSeed

Cependant, j'obtiens une erreur qui n'a pas de sens puisque le type de données de la colonne a été correctement modifié?

| Level | Code | Msg | Warn | 12 | Data truncated for column 'incoming_Cid' at row 1

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:

SQL Exception: Data truncated for column 'level' at row 1

Le problème s’est avéré être un désalignement de colonne qui a eu pour résultat que tinyint a essayé d’être stocké dans un champ datetime ou inversement.

5
Gray

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 de sauvegarder la valeur 'a' dans cette colonne, donc j'ai eu la mention Erreur.

Résolu en modifiant la définition de la colonne de la table et en ajoutant une valeur 'a' dans l'ensemble enum.

5
MTurPash

Dans mon cas, c’était une table avec un ENUM qui accepte les jours de la semaine sous forme d’entiers (0 à 6). Lors de l'insertion de la valeur 0 sous la forme d'un entier, le message d'erreur "Données tronquées pour la colonne ..." a été générée. Il a donc fallu convertir le nombre entier en chaîne. Donc au lieu de:

$item->day = 0;

Je devais faire;

$item->day = (string) 0;

Cela semble idiot de lancer le zéro comme ça, mais dans mon cas, c'était dans une usine Laravel, et je devais l'écrire comme ceci:

$factory->define(App\Schedule::class, function (Faker $faker) {
    return [
        'day' => (string) $faker->numberBetween(0, 6),
        //
    ];
});
1
iSWORD