Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Problemy z MySQL LOAD XML INFILE

Nie mogłem znaleźć sposobu, aby to zrobić za pomocą LOAD XML INFILE zachowując zawartość CDATA. Jednak poniższy kod działa i używa starego dobrego LOAD DATA INFILE wraz z ExtractValue() osiągnąć to samo:

Jeśli mamy twój przykładowy plik i tę tabelę:

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

wtedy uruchomienie tej instrukcji spowoduje zaimportowanie zawartości pliku do tabeli:

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')
;

Działa to poprzez poinformowanie LOAD DATA INFILE, że każdy <row>...</row> jest logiczną „linią”, którą przechowuje w lokalnej zmiennej @tmp . Następnie przekazujemy to do ExtractValue funkcjonować jako fragment XML i wybrać z niego wartości, które chcemy, używając odpowiednich wyrażeń XPath.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:żadne operacje nie są dozwolone po zamknięciu połączenia

  2. czy istnieje opcja automatycznej aktualizacji dla DateTimeField w peewee, np. TimeStamp w MySQL?

  3. Jak stworzyć instalację MySQL do testów lokalnych

  4. Jak zoptymalizować wydajność COUNT(*) w InnoDB za pomocą index

  5. mysql order by with union nie działa