Когда ниже приведен 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)
Ответы:
Вам не нужно
AND
ключевое слово. Вот правильный синтаксис оператора UPDATE :источник
Я получал это исключение не из-за AND вместо запятой, фактически у меня было это исключение только потому, что я не использовал апострофы в предложении where.
Как мой запрос был
когда я изменил условие where на
where column2 in ('00012121');
тогда, запрос работал нормально для меня.источник
STRICT_TRANS_TABLES
установилsql_mode
и попытался обновить поле, ограниченное (как представляется,) числовым значением вwhere
предложении, которое вызвало ошибку. Меняя режимы, он вместо этого выдавал предупреждение, но все равно не применил обновление. При ближайшем рассмотрении столбец, использованный в предложении where, несмотря на то, что он имел только то, что казалось целочисленными значениями, на самом деле представлял собойvarchar(20)
Попробуйте заменить
AND
с,
UPDATE Синтаксис показывает запятую следует использовать в качестве разделителя.
источник
Что это в основном
Это неправильный синтаксис, который заставляет MySQL думать, что вы пытаетесь что-то сделать со столбцом или параметром, который имеет неправильный тип «DOUBLE».
Учись на моей ошибке
В моем случае я обновил столбец varchar в таблице, в
NULL
которой0
стояло значение . Мой запрос на обновление был таким:Теперь, так как фактический тип
myValue
являетсяVARCHAR(255)
это дает предупреждение:А сейчас
myTable
практически пусто, потому чтоmyValue
теперьNULL
на КАЖДОЙ СТРОКЕ в таблице! Как это произошло?* внутренний крик *
Более 30 тысяч строк теперь имеют недостающие данные.
* внутренний крик усиливается *
Слава Богу за резервные копии. Я был в состоянии восстановить все данные.
* внутренняя интенсивность крика снижается *
Исправленный запрос выглядит следующим образом:
Хотелось бы, чтобы это было больше, чем просто предупреждение, поэтому забыть эти цитаты менее опасно.
* Конец внутреннего крика *
источник
Я просто потратил впустую свое время на это и хотел добавить дополнительный случай, когда эта ошибка представляет себя.
Тестовые данные
Проблема в том,
ORDER BY value1+0
- литье типов.Я знаю, что он не отвечает на вопрос, но это первый результат в Google для этой ошибки, и у него должны быть другие примеры, где эта ошибка представляет себя.
источник
В основном это неверные строки запроса.
Неправильно из-за тонкой синтаксической ошибки (неправильно поставленные круглые скобки) при использовании
INSTR
функции:Верный:
источник
Кажется, mysql изящно обрабатывает приведение типов с помощью операторов SELECT. Поле shop_id имеет тип varchar, но операторы select работают
Но когда вы пытаетесь обновить поля
Сбой с ошибкой. Усеченное неверное значение DOUBLE: '1t5hxq9'
Вам нужно поместить shop_id 26244317283 в кавычки '26244317283', чтобы запрос работал, так как поле имеет тип varchar, а не int
источник
Если вы столкнулись с этой проблемой при использовании вставки, похожей на приведенную ниже, проблема может заключаться просто в отсутствии пробела между
--
текстом комментария:Проблема в том, что на
--something
самом деле должно быть-- something
с пробелом.источник
Я столкнулся с этой ошибкой при использовании bindParam и указании PDO :: PARAM_INT, где я фактически передавал строку. Изменение в PDO :: PARAM_STR исправило ошибку.
источник
Я действительно сталкивался с этой ошибкой, когда пытался выполнить WHERE EXIST, где подзапрос соответствовал 2 столбцам, которые случайно были разных типов. В двух таблицах также были разные механизмы хранения.
Один столбец был CHAR (90), а другой - BIGINT (20).
Один стол был InnoDB, а другой - ПАМЯТЬ.
Часть запроса:
Изменение типа столбца в одном столбце с BIGINT на CHAR решило проблему.
источник