2016-04-18 15 views
0

Ich verwende die folgende Anweisung in einem mySQL-Workbench query:mysql Last xml Anweisung erzeugt 0 Datensätze

LOAD XML INFILE 'ProductFile.xml' INTO TABLE myDB.products 
ROWS IDENTIFIED BY '<product>'; 

, die das folgende Protokoll erzeugt:

19:15:52 LOAD XML INFILE 'ProductFile.xml' INTO TABLE ROWS myDB.products identified by '' 0 Zeile (n) betroffene Datensätze: 0 Deleted: 0 Skipped: 0 Warnungen: 0 0.000 sec

ProductFile.xml Daten enthält, im folgenden Format:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<products> 
    <product> 
    <name>Thing 1</name> 
    <productUrl>http://www.productsite.com/linkofsomesorttothing1</productUrl> 
    <ProductId>1234567890</ProductId> 
    </product> 
    <product> 
    <name>Thing 2</name> 
    <productUrl>http://www.productsite.com/linkofsomesorttothing2</productUrl> 
    <ProductId>1234567891</ProductId> 
    </product> 
</products> 

myDB.products ist wie folgt:

CREATE TABLE IF NOT EXISTS `myDB`.`Products` (
    `ProductId` INT UNSIGNED NOT NULL, 
    `name` VARCHAR(70) NOT NULL, 
    `productUrl` TEXT NULL, 
    PRIMARY KEY (`ProductId`), 
    UNIQUE INDEX `ProductId_UNIQUE` (`ProductId` ASC) 
) ENGINE=InnoDB COMMENT='\n'; 

Kann mir jemand sagen, warum es keine Ausgabe produzieren?

+0

Update: Es scheint ein Problem mit den tatsächlichen Daten, die ich zwischen den Start- und End-Tags habe (die oben genannten Daten sind Beispieldaten, die ich für die tatsächlichen Daten ersetzt). Ich poste ein Update, sobald ich die tatsächlichen Daten isoliert habe, die das Problem verursachen. Es ist ein bisschen merkwürdig, da es dort nichts gibt, was wie HTML-Tags aussieht, also überbietet es mich, warum der Parser verwirrt wird ... –

+0

Ich habe ein Problem gefunden, das aus dem Zeichensatz zu stammen scheint. Ich denke, ich muss den Zeichensatz angeben, der ISO-8859-1 auf der Anweisung LOAD entspricht ... latin1? –

+0

Das Problem kam tatsächlich aus dem Zeichensatz. Ich musste den Zeichensatz angeben, der ISO-8859-1 in der Anweisung LOAD entspricht, z. B. CHARACTER SET latin1. Jetzt funktioniert es! –

Antwort

0

Ich kann das Problem nicht reproduzieren.

Datei: /path/to/file/ProductFile.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 
<products> 
    <product> 
    <name>Thing 1</name> 
    <productUrl>http://www.productsite.com/linkofsomesorttothing1</productUrl> 
    <ProductId>1234567890</ProductId> 
    </product> 
    <product> 
    <name>Thing 2</name> 
    <productUrl>http://www.productsite.com/linkofsomesorttothing2</productUrl> 
    <ProductId>1234567891</ProductId> 
    </product> 
</products> 

MySQL-Befehlszeilen:

mysql> DROP TABLE IF EXISTS `Products`; 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE TABLE IF NOT EXISTS `Products` (
    -> `ProductId` INT UNSIGNED NOT NULL, 
    -> `name` VARCHAR(70) NOT NULL, 
    -> `productUrl` TEXT, 
    -> PRIMARY KEY (`ProductId`), 
    -> UNIQUE KEY `ProductId_UNIQUE` (`ProductId`) 
    ->) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='\n'; 
Query OK, 0 rows affected (0.01 sec) 

mysql> LOAD XML INFILE '/path/to/file/ProductFile.xml' 
    -> INTO TABLE `Products` 
    -> ROWS IDENTIFIED BY '<product>'; 
Query OK, 2 rows affected (0.00 sec) 
Records: 2 Deleted: 0 Skipped: 0 Warnings: 0 

mysql> SELECT 
    -> `ProductId`, 
    -> `name`, 
    -> `productUrl` 
    -> FROM 
    -> `Products`; 
+------------+---------+---------------------------------------------------+ 
| ProductId | name | productUrl          | 
+------------+---------+---------------------------------------------------+ 
| 1234567890 | Thing 1 | http://www.productsite.com/linkofsomesorttothing1 | 
| 1234567891 | Thing 2 | http://www.productsite.com/linkofsomesorttothing2 | 
+------------+---------+---------------------------------------------------+ 
2 rows in set (0.00 sec) 
+0

Danke für den Versuch @wchiquito. Es muss etwas mit der Art und Weise, wie ich meinen SQL Server konfiguriert habe, nicht stimmen, aber ich habe keine Ahnung was. –

0

Das Problem kam aus dem Zeichensatz. Ich musste den Zeichensatz angeben, der ISO-8859-1 in der Anweisung LOAD entspricht, z. B. CHARACTER SET latin1. Jetzt funktioniert es!