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 つの null があることがわかります。別の MySQL サーバー/データベースに移動してこのファイルを再インポートすると、show warnings スイッチを使用して、これが返されます:-

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 インポート プロセスに問題があり、フィールド ノードを閉じる簡単な方法を処理できないようです。

したがって、これは失敗します:-

しかし、これは機能します:-

これに対する簡単な回避策は、ファイルを PIPE アウトしますが、次を変更することです:-

xsi:nil="true" /> 

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

これが安全であると私が信じる理由は、値が存在する場合、タグの間にあるだけなので、xsi:nil が false に等しくならないためです。

では、これをどのように変更しますか....まあ、私は今見つけて、戻ってきて更新するつもりです....もっと早く。

この最初のポインターが他の人に役立つことを願っています.

于 2013-03-22T11:46:40.253 に答える
1

これは、私がプロジェクト全体に使用しているものであるPHPを使用したファイルのクイック検索と置換です。ここを参照してください-> PHPを使用してフラットファイルの値を検索して置換します

しかし、Linux (CentOS) の OS レベルでそれを行うことができれば素晴らしいので、PHP は大量のファイルを処理する必要がありません。検索する必要があります:-

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

それを次のように変更します:-

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

それを見つけて頑張ってください:)

于 2013-03-22T12:05:45.310 に答える