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.

0voto

Joe Philllips Points 13616

Si vous rencontrez ce problème avec un insert qui ressemble à celui ci-dessous, il se peut que le problème soit simplement l'absence d'un espace entre -- et le texte du commentaire :

insert into myTable (a, b, c)
values (
   123 --something
  ,345 --something else
  ,567 --something something else
);

Le problème est que le --something devrait en fait être -- something avec un espace.

0voto

Bytech Points 1027

J'ai rencontré cette erreur en utilisant bindParam, et en spécifiant PDO::PARAM_INT là où je passais en fait une chaîne. Le passage à PDO::PARAM_STR a corrigé l'erreur.

0voto

thephper Points 254

J'ai rencontré cette erreur lorsque j'ai essayé de faire un WHERE EXIST où la sous-requête correspondait à deux colonnes qui étaient accidentellement de types différents. Les deux tables avaient é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 :

[...] AND EXISTS (select objectid from temp_objectids where temp_objectids.objectid = items_raw.objectid );

La modification du type de colonne de BIGINT à CHAR pour cette colonne a permis de résoudre le problème.

0voto

Sonu Chohan Points 29
// CALL `ut_liquid_name_maildt`() Edit
// Truncated incorrect DOUBLE value: 'IPPAGUNTA VIJAYALAKSHMI'

// Code Sample

BEGIN

 -- Declare loop constructs --
    DECLARE done INT DEFAULT FALSE; 
    DECLARE my_id VARCHAR(50);
    DECLARE my_name VARCHAR(50);
    DECLARE my_mail_dt date;
    DECLARE my_name_gl VARCHAR(50);
    DECLARE my_mail_dt_gl VARCHAR(50);

-- cursor --
declare cr cursor for select t2.id,t1.name,t1.mail_dt,t2.name as name_gl,t2.mail_dt as mail_dt_gl
from sch_acc_saleint as t1
inner join
sch_acc_salegl  as t2 
where t1.sch_batch = t2.sch_batch;

 -- Declare Continue Handler --
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cr;

    read_loop: LOOP

        -- Fetch data from cursor --
        FETCH cr 
        INTO my_id,my_name,my_mail_dt,my_name_gl,my_mail_dt_gl;

       -- Exit loop if finished --
        IF done THEN
            LEAVE read_loop;
        END IF;
        -- Update Query --
        UPDATE sch_acc_salegl SET name = my_name and mail_dt = my_mail_dt  WHERE id = my_id;

    END LOOP read_loop;

CLOSE cr;

END

// I was using wrong update query that"s why it is showing error [ Truncated incorrect DOUBLE value ]
// For this type of error check update query
// For example :

UPDATE sch_acc_salegl SET name = my_name,mail_dt = my_mail_dt  WHERE id = my_id;

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