MYSQL Усеченное неверное значение DOUBLE - PullRequest
130 голосов
/ 11 августа 2010

Когда выполняется 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)

Ответы [ 8 ]

184 голосов
/ 11 августа 2010

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

UPDATE 
    shop_category 
SET 
    name = 'Secolul XVI - XVIII', 
    name_eng = '16th to 18th centuries' 
WHERE 
    category_id = 4768
66 голосов
/ 03 августа 2012

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

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

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

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

11 голосов
/ 11 августа 2010

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

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

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

4 голосов
/ 01 февраля 2018

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

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 для этой ошибки, и у него должны быть другие примеры, где эта ошибка возникает.

4 голосов
/ 21 октября 2016

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

Неправильно из-за тонкой синтаксической ошибки (неправильная скобка справа) при использовании функции 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;
2 голосов
/ 07 марта 2019

Что это в основном такое

Это неправильный синтаксис, который заставляет 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!

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

* Закончить внутренний крик *

0 голосов
/ 11 июля 2019

Кажется, что 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';
0 голосов
/ 14 июня 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...