J'ai eu le même problème, avec un champ de base de données de type "SET" qui est un type d'énumération.
J'ai essayé d'ajouter une valeur qui n'était pas dans cette liste.
La valeur que j'ai essayé d'ajouter avait la valeur décimale 256, mais la liste d'enum n'avait que 8 valeurs.
1: 1 -> A
2: 2 -> B
3: 4 -> C
4: 8 -> D
5: 16 -> E
6: 32 -> F
7: 64 -> G
8: 128 -> H
Il m'a donc suffi d'ajouter la valeur supplémentaire au champ.
En lisant ceci documentation L'entrée entrée m'a aidé à comprendre le problème.
MySQL stocke les valeurs SET sous forme numérique, avec le bit de poids faible de la valeur SET. valeur stockée correspondant au premier membre de l'ensemble. Si vous récupérez une valeur SET dans un contexte numérique, la valeur récupérée a des bits mis à jour correspondant aux membres de l'ensemble qui composent la valeur de la colonne. Pour Par exemple, vous pouvez extraire des valeurs numériques d'une colonne SET de la manière suivante :
mysql> SELECT set_col+0 FROM tbl_name; If a number is stored into a
Si un nombre est stocké dans une colonne SET, les bits qui sont activés dans la colonne représentation binaire du nombre détermine les membres du jeu dans la valeur de la colonne. Pour une colonne spécifiée comme SET('a', 'b', 'c', 'd'), la fonction membres ont les valeurs décimales et binaires suivantes.
SET Member Decimal Value Binary Value
'a' 1 0001
'b' 2 0010
'c' 4 0100
'd' 8 1000
Si vous attribuez une valeur de 9 à cette colonne, c'est-à-dire 1001 en binaire, alors les premier et quatrième membres de la valeur SET, 'a' et 'd', sont sélectionnés et la valeur résultante est "a,d".
2 votes
Quel est le type de données exact après modification ?
3 votes
Êtes-vous sûr que cette colonne a spécifié suffisamment de place pour un texte de cette longueur ?
1 votes
ALTER TABLES calls MODIFY incoming_Cid STRING;
c'est ce que j'ai fait.1 votes
Suppression du commentaire précédent en raison de l'EDIT : Je n'ai pas spécifié que la chaîne de caractères devait être char(34) au lieu de char(1), mais je ne sais pas comment le faire.
1 votes
STRING
n'est pas un type MySQL. Quel est votre moteur de base de données ?1 votes
Quoi
DESC calls;
spectacles ? Il y a quelque chose que vous ne nous dites pas. Si tu avais changé le type de données comme tu l'as dit, ça aurait marché. Voici sqlfiddle qui montre que votre déclaration de mise à jour fonctionne très bien.0 votes
J'utilise MySQL 5.5.31-0ubuntu0.12.04.2 (Ubuntu), et j'ai pensé que je pouvais utiliser char comme type de données, comme indiqué ci-dessous. ici
0 votes
@peterm Les appels de descente donnent
incoming_Cid | char(1) | YES | UNI | NULL
.0 votes
Duplicata possible de erreur 1265. Données tronquées pour une colonne lors du chargement de données à partir d'un fichier txt.