2011-11-19 152 views
0

我知道這裏有很多像這樣的錯誤,但是這個查詢看起來不同,因爲它是插入查詢。下面是表card_info模式:Mysql在INSERT查詢中截斷不正確的DOUBLE值

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從列​​。 collector_number並且它是一個VARCHAR(5)字段,並且該字段沒有被插入到card_info表無論如何,它只是被選擇查詢的順序子句中使用。

如果我只從SELECT開始查詢,我可以看到正確的結果被選中,但是當我插入時,它給了我上面的錯誤。請注意,如果我從SELECT查詢中刪除ORDER BY子句,它會插入正常。我不知道我做錯了什麼。

在此先感謝。

+0

你可以分享表card_info –

+0

我的模式更新噸他質疑該模式。感謝您的時間。 – voldomazta

回答

0

嘗試

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

可怕的是,如果屬實,但很有可能。

+0

由於collector_number的兩個值是「181b」和「181a」,並且假設有第三個記錄具有「180」,我希望它們以我的第一個排序只是數字升序的方式插入「(d.collector_number + 0)ASC「,接下來是排序字母」d.collector_number ASC「。我很抱歉,但我需要這樣的訂購。 – voldomazta

+0

我沒有改變順序。 180 +'0'是'1800',並且會在'180a'之前。我所做的只是告訴sql'0'是一個字符串而不是數字,看到order by子句是問題,並且您已經告訴它將0添加到一個字符串,並且您的字符串是180a,而不是一個數字.... –

+0

如果需要,您可以將ASC放回原處,但這是默認設置。看看你已經做了什麼,我可以看到爲什麼你可能需要他們,我已經添加到卡表的收集器號碼。 –

1

只是自己碰到同樣的錯誤,這有點讓人誤解。我發現在另一個線程答案:

Error Code 1292 - Truncated incorrect DOUBLE value - Mysql

This message means you're trying to compare a number and a string in a WHERE or ON clause. Either make sure they have similar declarations, or use an explicit CAST to convert the number to a string.

If you turn off strict mode, the error should turn into a warning.

Barmar

所以基本上檢查這些列被視爲錯誤的數據類型:

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

相關問題