Mysql Сокращенное неверное значение DOUBLE в запросе INSERT
Я знаю, что здесь много таких ошибок, но этот запрос кажется другим, так как это запрос на вставку. Вот схема для таблицы card_info:
CREATE TABLE card_info (
card_id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
card_name_orig varchar(150) NOT NULL,
card_name_html varchar(150) NOT NULL,
card_name_search varchar(150) NOT NULL,
card_name_page varchar(150) NOT NULL,
card_cost varchar(50) DEFAULT NULL,
card_cost_converted tinyint(2) NOT NULL DEFAULT '0',
card_subtype varchar(75) DEFAULT NULL,
card_oracle_text_orig text,
card_oracle_text_html text,
card_power varchar(10) DEFAULT NULL,
card_toughness varchar(10) DEFAULT NULL,
card_loyalty tinyint(1) DEFAULT NULL,
PRIMARY KEY (card_id),
KEY card_name_nd (card_name_search),
KEY card_name_page (card_name_page),
KEY card_cost_converted (card_cost_converted),
KEY card_power (card_power),
KEY card_toughness (card_toughness),
KEY card_loyalty (card_loyalty),
FULLTEXT KEY card_oracle_text_orig (card_oracle_text_orig),
FULLTEXT KEY card_name_search (card_name_search)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
И вот мой запрос:
INSERT INTO card_info (
card_name_orig, card_name_html, card_name_search, card_name_page, card_cost,
card_cost_converted, card_subtype, card_oracle_text_orig, card_oracle_text_html,
card_power, card_toughness, card_loyalty
)
SELECT DISTINCT
d.name_orig, d.name_html, d.name_search, d.name_page, d.cost,
COALESCE(d.cost_converted, 0), d.type_sub, d.oracle_text_orig,
d.oracle_text_html, d.`power`, d.toughness, d.loyalty
FROM card_info_de d
LEFT OUTER JOIN card_info i ON d.name_search = i.card_name_search
WHERE i.card_id IS NULL
AND d.edition_id = 'isd'
ORDER BY (d.collector_number + 0), d.collector_number;
Если я выполняю этот запрос, я получаю эту ошибку:
1292 - усеченное неверное значение DOUBLE: '181a'
Обратите внимание, что значение 181a из столбца card_info_de
, collector_number
и это поле VARCHAR(5), и это поле не вставляется в card_info
таблица в любом случае, она просто используется в предложении порядка запроса select.
Если я сделаю запрос, начиная с SELECT
только я вижу, что выбираются правильные результаты, но когда я делаю вставку, это дает мне ошибку выше. Обратите внимание: если я удаляю предложение ORDER BY из запроса SELECT, оно вставляется нормально. Я понятия не имею, что я делаю неправильно.
Заранее спасибо.
2 ответа
Просто попал в ту же ошибку сам, и это немного вводит в заблуждение. Я нашел ответ в другой теме:
Код ошибки 1292 - усеченное неверное значение DOUBLE - Mysql
Это сообщение означает, что вы пытаетесь сравнить число и строку в
WHERE
или жеON
пункт. Либо убедитесь, что они имеют похожие объявления, либо используйте явноеCAST
преобразовать число в строку.Если вы выключите
strict
В режиме ошибка должна превратиться в предупреждение.
Поэтому в основном проверьте, не обрабатывается ли любой из этих столбцов как неправильный тип данных:
d.name_search
i.card_name_search
d.edition_id
d.collector_number
Пытаться
ORDER BY (d.collector_number + '0'), d.collector_number;
Ужасно, если правда, но вполне возможно.