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'