2013-03-22 25 views
0

使用MySQL的CLI命令從表中,如導出行: -MySQL的XML導出在數據NULL不重新導入由於錯誤

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行「會員」和「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 

表模式是相同的,插入數據不會導致主鍵或唯一鍵的任何問題。那爲什麼它只插入一個空白記錄?

回答

1

這似乎是MySQL 5.5x的一個bug我沒有用MySQL 5.6x測試過,但問題似乎是重新導入在XML中定義的字段行爲空值(在XML中表示爲xsi: nil =「true」/>)導致此問題。

看來MySQL讀取XML的CLI導入過程出錯了,無法處理關閉字段節點的簡短方式。

所以這個失敗: -

但這個工程: -

快速解決有關此是仍然PIPE出來的文件,但隨後改變了: -

xsi:nil="true" /> 

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

我認爲這是安全的原因是由於xsi:nil從不等於錯誤,因爲如果有值,那麼它只會位於標籤之間。

那麼你如何改變這一點......好吧,我現在要找出並回來更新....更快。

希望這個初始指針可以幫助其他人,因爲它會讓我在凌晨發現問題的原因,並將它們驅趕到凌晨。

1

這裏是一個快速的搜索和使用PHP這是我在用整個項目文件替換,在這裏看到的 - >find and replace values in a flat-file using PHP

但它會很酷,如果我能在一個操作系統級別做Linux操作系統(CentOS的),所以PHP不必處理海量的文件,我需要尋找: -

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

並將其更改爲: -

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

祝你好運發現:)