MYSQL Усеченное неверное значение DOUBLE

Когда ниже приведен SQL-запрос:

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

Возникает следующая ошибка:

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

Как это исправить?


shop_category структура таблицы:

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

16 ответов

Решение

Вам не нужно AND ключевое слово. Вот правильный синтаксис оператора UPDATE:

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

Я получал это исключение не из-за AND вместо запятой, фактически у меня было это исключение только потому, что я не использовал апострофы в предложении where.

Как мой запрос был

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

когда я изменил где пункт where column2 in ('00012121'); тогда запрос работал нормально для меня.

Что это в принципе

Это неправильный синтаксис, который заставляет MySQL думать, что вы пытаетесь что-то сделать со столбцом или параметром, который имеет неправильный тип "DOUBLE".

Учись на моей ошибке

В моем случае я обновил столбец varchar в таблице настроек NULL где значение 0 стоял. Мой запрос на обновление был таким:

UPDATE myTable SET myValue = NULL WHERE myValue = 0;

Теперь, так как фактический тип myValue является VARCHAR(255) это дает предупреждение:

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

И сейчас myTable практически пусто, потому что myValue сейчас NULL для КАЖДОГО РЯДА в таблице! Как это случилось?
* внутренний крик *

Более 30 тысяч строк теперь имеют недостающие данные.
* внутренний крик усиливается *

Слава Богу за резервные копии. Я был в состоянии восстановить все данные.
* внутренняя интенсивность крика снижается *

Исправленный запрос выглядит следующим образом:

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

Хотелось бы, чтобы это было больше, чем просто предупреждение, поэтому забыть эти цитаты менее опасно.

* Конец внутреннего крика *

Попробуйте заменить AND с ,

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

Синтаксис ОБНОВЛЕНИЯ показывает, что запятую следует использовать в качестве разделителя.

Я просто потратил впустую свое время на это и хотел добавить дополнительный случай, когда эта ошибка представляет себя.

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

Тестовые данные

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

Проблема в ORDER BY value1+0 - тип литья.

Я знаю, что он не отвечает на вопрос, но это первый результат в Google для этой ошибки, и у него должны быть другие примеры, где эта ошибка представляет себя.

Кажется, mysql изящно обрабатывает приведение типов с помощью операторов SELECT. Поле shop_id имеет тип varchar, но операторы выбора работают

select * from shops where shop_id = 26244317283;

Но когда вы пытаетесь обновить поля

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

Сбой с ошибкой. Усеченное неверное значение DOUBLE: '1t5hxq9'

Вам нужно поместить shop_id 26244317283 в кавычки '26244317283', чтобы запрос работал, так как поле имеет тип varchar, а не int

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

В основном это недопустимые строки запроса.

Неправильно из-за тонкой синтаксической ошибки (неправильно поставленные круглые скобки) при использовании INSTR функция:

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

Правильный:

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

Это из-за наличия промежуточных "и" при использовании запроса на обновление.

НЕПРАВИЛЬНО ==> "update user_detail set name = ? and phone_code = ? and phone_num = ? and email = ? where emp_code = ?";

вместо этого используйте ЗАПЯТУЮ (,)

ВПРАВО ==> "update user_detail set name = ?, phone_code = ?, phone_number = ?, email = ? where emp_code = ?"

1292 - Усеченное неправильное значение DOUBLE:

Эта ошибка возникает, когда вы пытаетесь сравнить разные типы в SQL, например `uniqueid` = 1610386969.1713 в этом запросе:

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

измените его для передачи ошибки в этом примере ОБНОВЛЕНИЯ:

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

Но в вашей проблеме, если вы измените AND к , проблема будет решена

      UPDATE shop_category SET name = 'Secolul XVI - XVIII', name_eng = '16th to 18th centuries' WHERE category_id = 4768
$up="UPDATE users1 SET user_fname='$fname' and user_lname='$lname' where user_emp_code=$emp";

После удаления и замены and с , его работает нормально:

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

У меня возникла эта ошибка при использовании bindParam и указании PDO::PARAM_INT, где я фактически передавал строку. Переход на PDO::PARAM_STR исправил ошибку.

У меня возникла эта ошибка, когда я попытался выполнить WHERE EXIST, где подзапрос совпал с двумя столбцами, которые случайно были разных типов. Две таблицы также были разными механизмами хранения.

В одном столбце был CHAR (90), а в другом - BIGINT (20).

Одна таблица была InnoDB, а другая - MEMORY.

Часть запроса:

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

Изменение типа столбца в одном столбце с BIGINT на CHAR решило проблему.

В моем случае это была функция Dreamweaver, которая очищает данные перед выполнением запросов mysql:

GetSQLValueString($my_string, "text")

по ошибке у меня было так:

GetSQLValueString($my_string, "int")

В основном преобразую мою строку в целое число, а затем пытаюсь запустить запросы MySQL на основе этого. Когда это должна была быть строка.

Поэтому использование «int» вместо «text» вызвало у меня проблему .

      // 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;

Если вы столкнулись с этой проблемой при использовании вставки, похожей на приведенную ниже, проблема может заключаться просто в отсутствии пробела между -- и текст комментария:

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

Проблема в том, что --something должно быть на самом деле -- something с пробелом.

Я получал ту же ошибку, и она была устранена после замены AND на "," между двумя значениями столбца.

ОБНОВЛЕНИЕ IGNORE TRANSFORMERDATA SET TRANSFORMERNAME='DummyXmer.jar', REMARKS ='DummeyXmer' WHERE GENERATEDRUNID='DB1-DB2RYTSYFGWTY8966'

Другие вопросы по тегам