Mysql Сокращенное неверное значение DOUBLE в запросе INSERT - PullRequest
0 голосов
/ 19 ноября 2011

Я знаю, что здесь много таких ошибок, но этот запрос кажется другим, так как это запрос на вставку.Вот схема для таблицы 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, оно просто используется в предложении order запроса select.

Если я делаю запрос, начиная только с SELECT, я вижу, что выбираются правильные результаты, но когда я делаю вставку, это выдает мне ошибку выше.Обратите внимание, что если я удаляю предложение ORDER BY из запроса SELECT, он вставляется нормально.Понятия не имею, что я делаю неправильно.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 14 февраля 2018

Просто попал в ту же ошибку сам, и это немного вводит в заблуждение.Я нашел ответ в другой теме:

Код ошибки 1292 - усеченное неверное значение DOUBLE - Mysql

Это сообщение означает, что вы пытаетесь сравнить числои строка в предложении WHERE или ON.Либо убедитесь, что они имеют аналогичные объявления, либо используйте явное CAST для преобразования числа в строку.

Если вы отключите режим strict, ошибка должна превратиться в предупреждение.

Barmar

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

d.name_search i.card_name_search d.edition_id d.collector_number

0 голосов
/ 19 ноября 2011

Попробуйте

ORDER BY (d.collector_number + '0'), d.collector_number;

Ужасно, если верно, но вполне возможно.

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