MYSQL Truncated incorrect DOUBLE value
Asked Answered
T

14

196

When the SQL query below is executed:

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

The following error is raised:

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

How to fix this?


shop_category table structure:

category_id   mediumint(8)
name        varchar(250)
name_eng      varchar(250)
Thimble answered 11/8, 2010 at 7:37 Comment(3)
Is it in any way determinable what the real meaning of this error message is, and in which cases it shows up? Since it occurs in contexts where a DOUBLE value is not involved, it seems somewhat misleading.Kafiristan
Guess it tries to calculate BOOLEAN value of 'Secolul XVI - XVIII' before AND.Gasholder
If you have "where x = 'x' and y" you will get this poorly conceived and obscure errorOnstage
D
278

You don't need the AND keyword. Here's the correct syntax of the UPDATE statement:

UPDATE 
    shop_category 
SET 
    name = 'Secolul XVI - XVIII', 
    name_eng = '16th to 18th centuries' 
WHERE 
    category_id = 4768
Diapositive answered 11/8, 2010 at 7:40 Comment(7)
Really glad I found this answer before throwing the computer in to a wallHettie
so definitely stupidity on the part of people like me making that mistake, however, 'Truncated incorrect DOUBLE value' is a pretty useless warning message...Hettie
Basically whenever there is some Syntax issue it throws this useless exception "mysql-truncated-incorrect-double-value"Palate
Yes..i too had a similar experience while trying to use a string literal in 'where' clause without the using quotes.Kathernkatheryn
I was about to commit suicide because of this. Thank god you saved my life. This stupid AND in update. 😠🤣Assortment
Take your upvote, and my dignity, and go.Tribalism
wow... Just wow.Zannini
N
91

I was getting this exception not because of AND instead of comma, in fact I was having this exception just because I was not using apostrophes in where clause.

Like my query was

update table set coulmn1='something' where column2 in (00012121);

when I changed where clause to where column2 in ('00012121'); then the query worked fine for me.

Nereidanereids answered 3/8, 2012 at 4:4 Comment(4)
Same issue for me! I was trying to update a table in a crm that uses 1 as the user id of admin user and 36 char guids for all other users. My where was specifying the user_id as 1, without the quotes. I think this is related to mysql being in strict mode.Earthwork
@danny_mulvihill I believe you are on the right track. I had STRICT_TRANS_TABLES set in sql_mode and attempting to update a field limited with (what appeared to be) a numeric value in the where clause threw an error. Changing modes, it threw a warning instead, but still did not apply the update. Upon closer inspection, the column used in the where clause, despite only having what appeared to be integer values, was actually a varchar(20)Purchase
Same issue for me. A 'select * from t where id = 6503' worked okay but 'update t set a = "foo" where id = 6503' resulted in ERROR 1292 (22007): Truncated incorrect DOUBLE value: '234805557438#'. id looks like integer but was a varchar. Quoting the value in the update solved the problem. 'update t set a = "foo" where id = "6503"'Stumble
Same issue for me when passing a INSERT that was working in mysql console but wasn't working in Pentaho Data Integration software. Changed "name > 1000 and name < 6000" to "name > '1000' and name < '6000'" and worked like a charm.Pap
C
34

What it basically is

It's incorrect syntax that causes MySQL to think you're trying to do something with a column or parameter that has the incorrect type "DOUBLE".

Learn from my mistake

In my case I updated the varchar column in a table setting NULL where the value 0 stood. My update query was like this:

UPDATE myTable SET myValue = NULL WHERE myValue = 0;

Now, since the actual type of myValue is VARCHAR(255) this gives the warning:

+---------+------+-----------------------------------------------+
| Level   | Code | Message                                       |
+---------+------+-----------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'value xyz' |
+---------+------+-----------------------------------------------+

And now myTable is practically empty, because myValue is now NULL for EVERY ROW in the table! How did this happen?
*internal screaming*

Over 30k rows now have missing data.
*internal screaming intensifies*

Thank goodness for backups. I was able to recover all the data.
*internal screaming intensity lowers*

The corrected query is as follows:

UPDATE myTable SET myValue = NULL WHERE myValue = '0';
                                                  ^^^
                                                  Quotation here!

I wish this was more than just a warning so it's less dangerous to forget those quotes.

*End internal screaming*

Currant answered 7/3, 2019 at 17:16 Comment(2)
You can set an option to fail on warnings - see https://mcmap.net/q/130015/-how-can-i-make-fatal-errors-of-all-mysql-warningsCounterweigh
Does it include fail on internal screamings?Boron
F
16

Try replacing the AND with ,

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

The UPDATE Syntax shows comma should be used as the separator.

Frontier answered 11/8, 2010 at 7:40 Comment(0)
O
8

I just wasted my time on this and wanted to add an additional case where this error presents itself.

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

Test data

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

The problem is ORDER BY value1+0 - type casting.

I know that it does not answer the question but this is the first result on Google for this error and it should have other examples where this error presents itself.

Oscular answered 1/2, 2018 at 11:59 Comment(0)
B
7

It seems mysql handles the type casting gracefully with SELECT statements. The shop_id field is of type varchar but the select statements works

select * from shops where shop_id = 26244317283;

But when you try updating the fields

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

It fails with error Truncated incorrect DOUBLE value: '1t5hxq9'

You need to put the shop_id 26244317283 in quotes '26244317283' for the query to work since the field is of type varchar not int

update stores set store_url = 'https://test-url.com' where shop_id = '26244317283';
Brisket answered 11/7, 2019 at 12:50 Comment(0)
U
6

Mainly invalid query strings will give this warning.

Wrong due to a subtle syntax error (misplaced right parenthesis) when using INSTR function:

INSERT INTO users (user_name) SELECT name FROM site_users WHERE
INSTR(status, 'active'>0);

Correct:

INSERT INTO users (user_name) SELECT name FROM site_users WHERE
INSTR(status, 'active')>0;
Unlikelihood answered 21/10, 2016 at 17:9 Comment(1)
I had an interesting situation that was similar to this. Someone had used "select Field + Field2" instead of "select concat(Field,Field2)" on an insert statement.Evolutionist
T
6

This is because of "and" in-between while using update query

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

instead of this use COMMA(,)

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

Taction answered 11/6, 2021 at 6:55 Comment(0)
A
4

1292 - Truncated incorrect DOUBLE value:

This error occurs when you try to compare different types on SQL like `uniqueid` = 1610386969.1713 in this query:

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

change it for passing the error on this UPDATE example:

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

But in your problem, if you change the AND to , the problem will be resolved

UPDATE shop_category SET name = 'Secolul XVI - XVIII', name_eng = '16th to 18th centuries' WHERE category_id = 4768
Acantho answered 29/4, 2021 at 9:37 Comment(0)
C
0

If you're getting this problem with an insert that looks like the one below, the problem may simply be the lack of a space between -- and the comment text:

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

The problem with this is that the --something should actually be -- something with a space.

Crosspatch answered 14/6, 2018 at 20:8 Comment(0)
W
0

I experienced this error when using bindParam, and specifying PDO::PARAM_INT where I was actually passing a string. Changing to PDO::PARAM_STR fixed the error.

Woodcut answered 14/11, 2019 at 22:50 Comment(0)
S
0

I did experience this error when I tried doing an WHERE EXIST where the subquery matched 2 columns that accidentially was different types. The two tables was also different storage engines.

One column was a CHAR (90) and the other was a BIGINT (20).

One table was InnoDB and the other was MEMORY.

Part of query:

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

Changing the column type on the one column from BIGINT to CHAR solved the issue.

Solvable answered 7/1, 2020 at 13:23 Comment(0)
P
0
// 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;
Plantaineater answered 12/3, 2022 at 6:15 Comment(0)
R
0

In my case it was a Dreamweaver function that sanitizes the data before running mysql queries:

GetSQLValueString($my_string, "text")

by mistake I had it as:

GetSQLValueString($my_string, "int")

Basically converting my string to an integer then trying to run MySQL queries based on that. When it should have been a string.

So using "int" instead of "text" caused the problem for me.

Ro answered 11/9, 2022 at 21:56 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.