使用MySql中的位字段加载XML

时间:2012-01-19 04:24:37

标签: 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$$ 

一个名为“data.xml”的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

2 个答案:

答案 0 :(得分:5)

MySQL建议下一步做:

无法使用二进制表示法加载BIT值(例如,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);

...我收到了警告信息 - '列't'不能为空'。

希望这对你有用;否则,我认为你应该向bugs.mysql.com写一个请求

答案 1 :(得分:0)

LOAD XML INFILE似乎不擅长从任意XML导入数据。

我有一个关于使用LOAD DATA INFILE从XML导入的博客post。由于该方法使用用户定义的变量来保存组,因此您可以添加一个额外的函数来转换值。

或者,您可以尝试从XML导出数据,查看它如何表示位值并在加载XSLT之前调整xml。

我的帖子实际上受到了问题的启发:LOAD XML LOCAL INFILE with Inconsistent Column Names