0

使用 MySQL CLI 命令从表中导出一行,例如:-

mysql -h mysql --user=root --password=root --database dms_home --xml -e "SELECT * FROM users WHERE account=4149;" >/var/www/scripts/output/1187515/1187515_users.sql

这将输出文件:-

<resultset statement="SELECT * FROM accounts WHERE accnum=1187515" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <row>
    <field name="id">4149</field>
    <field name="accnum">1187515</field>
    <field name="applicationdate">0000-00-00</field>
    <field name="introducer"></field>
    <field name="jointacc">0</field>
    <field name="consultancy">0</field>
    <field name="storage">0</field>
    <field name="digitalonly">0</field>
    <field name="membership" xsi:nil="true" />
    <field name="promocode"></field>
    <field name="holdername" xsi:nil="true" />
    <field name="testaccount">0</field>
  </row>
</resultset>

现在,您可以看到 XML 行“membership”和“holdername”中有 2 个空值,如果我随后转到另一个 MySQL 服务器/数据库并重新导入此文件,使用显示警告开关,我会得到这个:-

mysql -h mysql -u root -p dms_licence --show-warnings -e "load xml local infile '/var/www/scripts/output/1187515/1187515_account.sql' into table dms_licence.accounts";


Warning (Code 1263): Column set to default value; NULL supplied to NOT NULL column 'id' at row 1
Warning (Code 1263): Column set to default value; NULL supplied to NOT NULL column 'accnum' at row 1
Warning (Code 1263): Column set to default value; NULL supplied to NOT NULL column 'applicationdate' at row 1
Warning (Code 1263): Column set to default value; NULL supplied to NOT NULL column 'introducer' at row 1
Warning (Code 1263): Column set to default value; NULL supplied to NOT NULL column 'jointacc' at row 1
Warning (Code 1263): Column set to default value; NULL supplied to NOT NULL column 'consultancy' at row 1
Warning (Code 1263): Column set to default value; NULL supplied to NOT NULL column 'storage' at row 1
Warning (Code 1263): Column set to default value; NULL supplied to NOT NULL column 'digitalonly' at row 1
Warning (Code 1263): Column set to default value; NULL supplied to NOT NULL column 'promocode' at row 1
Warning (Code 1263): Column set to default value; NULL supplied to NOT NULL column 'testaccount' at row 1

表模式是相同的,插入数据不会导致主键或唯一键出现任何问题。那么为什么它只插入一条空白记录呢?

4

2 回答 2

1

这似乎是 MySQL 5.5x 的错误我尚未使用 MySQL 5.6x 进行测试,但问题似乎在于重新导入 XML 中定义为空值的字段行(在 XML 中表示为 xsi:nil="true " /> ) 导致此问题。

用于读取 XML 的 MySQL CLI 导入过程似乎有问题,无法处理关闭字段节点的快捷方式。

所以这失败了: -

但这有效:-

解决此问题的一个快速解决方法是仍然通过管道输出文件,然后更改:-

xsi:nil="true" /> 

xsi:nil="true"></field>

我认为这是安全的原因是由于 xsi:nil 永远不会等于 false,因为如果有一个值,那么它只会位于标签之间。

那么你如何改变这个......好吧,我现在要找出并回来更新......更多。

希望这个初始指针可以帮助其他人,因为它让我在凌晨试图找出问题所在。

于 2013-03-22T11:46:40.253 回答
1

这是使用 PHP 对文件进行快速搜索和替换,这是我在整个项目中使用的,请参见此处 ->使用 PHP 在平面文件中查找和替换值

但如果我能在 Linux (CentOS) 上的操作系统级别做到这一点会很酷,这样 PHP 就不必处理大量文件,我需要搜索:-

" xsi:nil=\"true\" />"

并将其更改为:-

" xsi:nil=\"true\"></field>"

祝你好运找到那个:)

于 2013-03-22T12:05:45.310 回答