vol*_*zta 0 mysql warnings insert mysql-error-1292
我知道这里有很多这样的错误,但这个查询似乎不同,因为它是一个插入查询。这是表 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
Run Code Online (Sandbox Code Playgroud)
这是我的查询:
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;
Run Code Online (Sandbox Code Playgroud)
如果我执行此查询,则会收到此错误:
请注意,值181a来自列card_info_de。collector_number它是一个VARCHAR(5)字段,并且该字段并没有被插入到card_info表中,它只是在选择查询的 order 子句中使用。
如果我从SELECT唯一开始进行查询,我可以看到正在选择正确的结果,但是当我进行插入时,它给了我上面的错误。请注意,如果我从 SELECT 查询中删除 ORDER BY 子句,它会很好地插入。我不知道我做错了什么。
提前致谢。
小智 5
只是自己遇到了同样的错误,这有点误导。我在另一个帖子里找到了答案:
错误代码 1292 - 截断了不正确的 DOUBLE 值 - Mysql
此消息表示您正在尝试比较
WHEREorON子句中的数字和字符串。要么确保它们具有相似的声明,要么使用显式CAST将数字转换为字符串。如果关闭
strict模式,错误应该变成警告。
所以基本上检查这些列中的任何一个被视为错误的数据类型:
d.name_search
i.card_name_search
d.edition_id
d.collector_number