171 votes

MYSQL a tronqué une valeur DOUBLE incorrecte

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 soulevée :

1292 - Truncated incorrect DOUBLE value: 'Secolul XVI - XVIII'

Comment résoudre ce problème ?


shop_category la structure des tableaux :

category_id   mediumint(8)
name        varchar(250)
name_eng      varchar(250)

1 votes

Peut-on déterminer la signification réelle de ce message d'erreur et dans quels cas il apparaît ? Comme il apparaît dans des contextes où une valeur DOUBLE n'est pas impliquée, il semble quelque peu trompeur.

0 votes

Je suppose qu'il essaie de calculer la valeur BOOLEAN de 'Secolul XVI - XVIII' avant AND.

2 votes

Si vous avez "où x = 'x' et y", vous obtiendrez cette erreur obscure et mal conçue.

6voto

hrvoj3e Points 76

Je viens de perdre mon temps sur ce sujet et je voulais ajouter un cas supplémentaire où cette erreur se présente.

SQL Error (1292): Truncated incorrect DOUBLE value: 'N0003'

Données d'essai

CREATE TABLE `table1 ` (
    `value1` VARCHAR(50) NOT NULL 
);
INSERT INTO table1 (value1) VALUES ('N0003');

CREATE TABLE `table2 ` (
    `value2` VARCHAR(50) NOT NULL 
);

INSERT INTO table2 (value2)
SELECT value1
FROM table1
WHERE 1
ORDER BY value1+0

Le problème est que ORDER BY value1+0 - de type casting.

Je sais que cela ne répond pas à la question mais c'est le premier résultat sur Google pour cette erreur et il devrait y avoir d'autres exemples où cette erreur se présente.

4voto

Adam Winnipass Points 341

Il semblerait que mysql gère le casting de type de manière élégante avec les instructions SELECT. Le champ shop_id est de type varchar mais les instructions SELECT fonctionnent.

select * from shops where shop_id = 26244317283;

Mais lorsque vous essayez de mettre à jour les champs

update stores set store_url = 'https://test-url.com' where shop_id = 26244317283;

Il échoue avec l'erreur "Truncated incorrect DOUBLE value : '1t5hxq9'".

Vous devez mettre le shop_id 26244317283 entre guillemets '26244317283' pour que la requête fonctionne puisque le champ est de type varchar et non int.

update stores set store_url = 'https://test-url.com' where shop_id = '26244317283';

3voto

CodingBee Points 21

Cela s'explique par "et" entre les deux en utilisant la requête de mise à jour

MAUVAIS \==> "update user_detail set name = ? and phone_code = ? and phone_num = ? and email = ? where emp_code = ?";

au lieu de cela, utilisez COMMA(,)

DROIT \==> "update user_detail set name = ?, phone_code = ?, phone_number = ?, email = ? where emp_code = ?"

1voto

user2037129 Points 1

1292 - A tronqué une valeur DOUBLE incorrecte :

Cette erreur se produit lorsque vous essayez de comparer des types différents de SQL comme `uniqueid` = 1610386969.1713 dans cette requête :

UPDATE `cdr` SET `userfield`='survey=5,' WHERE `uniqueid` = 1610386969.1713

le changer pour passer l'erreur sur cet exemple UPDATE :

UPDATE `cdr` SET `userfield`='survey=5,' WHERE `uniqueid` = '1610386969.1713'

Mais dans votre problème, si vous changez le AND a , le problème sera résolu

UPDATE shop_category SET name = 'Secolul XVI - XVIII', name_eng = '16th to 18th centuries' WHERE category_id = 4768

1voto

user2885382 Points 11
$up="UPDATE users1 SET user_fname='$fname' and user_lname='$lname' where user_emp_code=$emp";

Après l'enlèvement et la remise en place de l and avec , Il fonctionne bien :

$up="UPDATE users1 SET user_fname='$fname', user_lname='$lname' where user_emp_code=$emp";

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X