Ответ 1
Вам не нужно ключевое слово AND
. Здесь правильный синтаксис инструкции UPDATE:
UPDATE
shop_category
SET
name = 'Secolul XVI - XVIII',
name_eng = '16th to 18th centuries'
WHERE
category_id = 4768
Когда ниже приведен 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
таблицы shop_category
:
category_id mediumint(8)
name varchar(250)
name_eng varchar(250)
Вам не нужно ключевое слово AND
. Здесь правильный синтаксис инструкции UPDATE:
UPDATE
shop_category
SET
name = 'Secolul XVI - XVIII',
name_eng = '16th to 18th centuries'
WHERE
category_id = 4768
Я получал это исключение не из-за И вместо запятой, на самом деле у меня было это исключение только потому, что я не использовал апострофы в where where.
Как и мой запрос
update table set coulmn1='something' where column2 in (00012121);
когда я изменил предложение where на where column2 in ('00012121');
, тогда запрос работал отлично для меня.
Попробуйте заменить AND
на ,
UPDATE shop_category
SET name = 'Secolul XVI - XVIII', name_eng = '16th to 18th centuries'
WHERE category_id = 4768
Синтаксис UPDATE показывает, что запятая должна использоваться как разделитель.
В основном недопустимые строки запроса выдадут это предупреждение.
Неверно из-за тонкой синтаксической ошибки (неправильной скобки) при использовании функции 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;
Я просто потратил впустую свое время на это и хотел добавить дополнительный случай, когда эта ошибка представляет себя.
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 думать, что вы пытаетесь что-то сделать со столбцом или параметром, который имеет неправильный тип "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
для myValue
в таблице! Как это случилось?
* внутренний крик *
Более 30 тысяч строк теперь имеют недостающие данные.
* внутренний крик усиливается *
Слава Богу за резервные копии. Я был в состоянии восстановить все данные.
* внутренняя интенсивность крика снижается *
Исправленный запрос выглядит следующим образом:
UPDATE myTable SET myValue = NULL WHERE myValue = '0';
^^^
Quotation here!
Хотелось бы, чтобы это было больше, чем просто предупреждение, поэтому было бы менее опасно забывать эти цитаты.
* Конец внутреннего крика *
$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";
Если вы получаете эту проблему с помощью вставки, которая выглядит, как показано ниже, проблема может быть просто отсутствие пространства между --
и текстом комментария:
insert into myTable (a, b, c)
values (
123 --something
,345 --something else
,567 --something something else
);
Проблема в том, что --something
должен быть -- something
с пробелом.
Кажется, 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';
Я получал ту же ошибку, и это было разрешено после замены AND символом "," между двумя значениями столбца.
UPDATE IGNORE TRANSFORMERDATA SET TRANSFORMERNAME = 'DummyXmer.jar', REMARKS = 'DummeyXmer' WHERE GENERATEDRUNID = 'DB1-DB2RYTSYFGWTY8966'