我有下表:
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
?
答案 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