Lorsque la requête SQL ci-dessous est exécutée:
UPDATE shop_category
SET name = 'Secolul XVI - XVIII'
AND name_eng = '16th to 18th centuries'
WHERE category_id = 4768
L'erreur suivante est générée:
1292 - Truncated incorrect DOUBLE value: 'Secolul XVI - XVIII'
Comment régler ceci?
shop_category
structure de la table:
category_id mediumint(8)
name varchar(250)
name_eng varchar(250)
Réponses:
Vous n'avez pas besoin du
AND
mot - clé. Voici la syntaxe correcte de l'instruction UPDATE :la source
J'obtenais cette exception non pas à cause de ET au lieu de la virgule, en fait j'avais cette exception simplement parce que je n'utilisais pas d'apostrophes dans la clause where.
Comme ma requête était
quand j'ai changé la clause where en
where column2 in ('00012121');
alors la requête a bien fonctionné pour moi.la source
STRICT_TRANS_TABLES
installésql_mode
et essayé de mettre à jour un champ limité avec (ce qui semblait être) une valeur numérique dans lawhere
clause a généré une erreur. Changement de mode, il a lancé un avertissement à la place, mais n'a toujours pas appliqué la mise à jour. En y regardant de plus près, la colonne utilisée dans la clause where, bien qu'elle n'ait que ce qui semblait être des valeurs entières, était en fait unvarchar(20)
Essayez de remplacer le
AND
par,
La syntaxe UPDATE indique que la virgule doit être utilisée comme séparateur.
la source
Qu'est-ce que c'est fondamentalement
C'est une syntaxe incorrecte qui fait penser à MySQL que vous essayez de faire quelque chose avec une colonne ou un paramètre qui a le type incorrect "DOUBLE".
Apprenez de mon erreur
Dans mon cas, j'ai mis à jour la colonne varchar dans un paramètre de table
NULL
où la valeur0
se situait. Ma requête de mise à jour était comme ceci:Maintenant, puisque le type réel de
myValue
estVARCHAR(255)
ceci donne l'avertissement:Et maintenant
myTable
est pratiquement vide, carmyValue
c'est maintenantNULL
pour CHAQUE RANG du tableau! Comment est-ce arrivé?* hurlement interne *
Plus de 30 000 lignes ont maintenant des données manquantes.
* les hurlements internes s'intensifient *
Dieu merci pour les sauvegardes. J'ai pu récupérer toutes les données.
* L'intensité des cris internes diminue *
La requête corrigée est la suivante:
J'aurais aimé que ce soit plus qu'un simple avertissement, il est donc moins dangereux d'oublier ces citations.
* Fin des cris internes *
la source
Je viens de perdre mon temps là-dessus et je voulais ajouter un cas supplémentaire où cette erreur se présente.
Données de test
Le problème est
ORDER BY value1+0
- le casting de type.Je sais qu'il ne répond pas à la question mais c'est le premier résultat sur Google pour cette erreur et il devrait avoir d'autres exemples où cette erreur se présente.
la source
Les chaînes de requête non valides donneront cet avertissement.
Mauvais en raison d'une erreur de syntaxe subtile (parenthèse droite mal placée) lors de l'utilisation de la
INSTR
fonction:Correct:
la source
Il semble que mysql gère le type de transtypage avec élégance avec les instructions SELECT. Le champ shop_id est de type varchar mais les instructions select fonctionnent
Mais lorsque vous essayez de mettre à jour les champs
Il échoue avec l'erreur Valeur DOUBLE incorrecte tronquée: '1t5hxq9'
Vous devez mettre le shop_id 26244317283 entre guillemets '26244317283' pour que la requête fonctionne car le champ est de type varchar pas int
la source
Si vous rencontrez ce problème avec un insert qui ressemble à celui ci-dessous, le problème peut simplement être le manque d'espace entre
--
et le texte du commentaire:Le problème avec ceci est que le
--something
devrait en fait être-- something
avec un espace.la source
J'ai rencontré cette erreur lors de l'utilisation de bindParam et de la spécification de PDO :: PARAM_INT où je passais en fait une chaîne. Le passage à PDO :: PARAM_STR a corrigé l'erreur.
la source
J'ai rencontré cette erreur lorsque j'ai essayé de faire un WHERE EXIST où la sous-requête correspondait à 2 colonnes qui étaient accidentellement de types différents. Les deux tables étaient également des moteurs de stockage différents.
Une colonne était un CHAR (90) et l'autre était un BIGINT (20).
Une table était InnoDB et l'autre était MEMORY.
Partie de la requête:
La modification du type de colonne sur une colonne de BIGINT à CHAR a résolu le problème.
la source