2012-01-19 64 views
2

位字段我有如下表:加載XML與MySQL的

CREATE TABLE `tmp_table` ( 
`id` int(11) NOT NULL AUTO_INCREMENT, 
`t` bit(1) NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1$$ 

和一個XML文件名爲 「data.xml中」 包含1號線:

<list><row t="0" /></list> 

當我運行以下命令:

LOAD XML LOCAL INFILE 'c:/temp/data.xml' INTO TABLE `tmp_table` 

運行此命令後,我得到一個一行的「1」列T和值的警告:

LOAD XML LOCAL INFILE 'c:/temp/data.xml' INTO TABLE `tmp_table` 1 row(s) affected, 1 warning(s): 
1264 Out of range value for column 't' at row 1 
Records: 1 Deleted: 0 Skipped: 0 Warnings: 1 0.000 sec 

如何在xml文檔中爲位域加載0

回答

5

的MySQL提示下一步該怎麼做:

位值不能在使用二進制表示法(例如,b'011010' )被加載。要解決此問題,指定的值作爲普通整數和使用SET子句將它們轉換,使MySQL能夠執行數字類型轉換和加載它們到BIT列正確:

http://dev.mysql.com/doc/refman/5.5/en/load-data.html

我已經試過這查詢:

LOAD XML LOCAL INFILE 'data.xml' INTO TABLE `tmp_table` 
    ROWS IDENTIFIED BY '<row>' 
    (@var1) 
    SET t = CAST(@var1 AS SIGNED); 

...和我STANGE警告信息 - '列 'T' 不能爲空'。

希望這會對你有用;否則,我認爲,你應該寫一個請求bugs.mysql.com

+0

不錯,我應該懷疑可以在'LOAD XML INFILE'中使用用戶定義的變量=) – newtover

0

LOAD XML INFILE似乎不擅長從任意XML導入數據。

我有一個博客post關於使用LOAD DATA INFILE從XML導入。由於該方法使用用戶定義的變量來保存該組,因此可以添加一個額外的函數來轉換該值。

或者,您可以嘗試從XML中導出MySQL數據,查看它如何表示位值並在使用XSLT加載之前調整xml。

我的職位是實際問題的啓發:LOAD XML LOCAL INFILE with Inconsistent Column Names