sql >> Database >  >> RDS >> Mysql

Problemen met MySQL LOAD XML INFILE

Ik kon geen manier vinden om dit te doen met LOAD XML INFILE met behoud van de CDATA-inhoud. Het volgende werkt echter en gebruikt het goede oude LOAD DATA INFILE samen met ExtractValue() om hetzelfde te bereiken:

Als we uw voorbeeldbestand en deze tabel hebben:

CREATE TABLE `yahootable` (
  `id` int(11) NOT NULL PRIMARY KEY,
  `various` text,
  `message` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;

dan zal het uitvoeren van deze instructie de inhoud van het bestand in de tabel importeren:

LOAD DATA INFILE 
    '/tmp/yahootable.xml'
INTO TABLE 
    yahootable
CHARACTER SET 'utf8'
LINES STARTING BY '<row>' TERMINATED BY '</row>'
(@tmp)
SET
  id      = ExtractValue(@tmp, '//id'),
  various = ExtractValue(@tmp, '//various'),
  message = ExtractValue(@tmp, '//message')
;

Dit werkt door LOAD DATA INFILE te vertellen dat elke <row>...</row> is een logische 'regel', die het opslaat in de lokale variabele @tmp . We geven dit vervolgens door aan de ExtractValue functioneren als een XML-fragment en selecteer de waarden eruit die we willen met behulp van de juiste XPath-expressies.




  1. doctrine2:hoe u een één-op-veel omzet in een veel-op-veel zonder gegevens te verliezen

  2. Hoe de beheerserver in R12.2 toe te voegen?

  3. MySQL-fout Te veel verbindingen

  4. php/mysql met meerdere zoekopdrachten