Mysql
 sql >> база данни >  >> RDS >> Mysql

Проблеми с MySQL LOAD XML INFILE

Не можах да намеря начин да направя това с помощта на LOAD XML INFILE като същевременно запазва съдържанието на CDATA. Въпреки това, следното работи и използва добрия стар LOAD DATA INFILE заедно с ExtractValue() за да постигнете същото:

Ако имаме вашия примерен файл и тази таблица:

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

след това изпълнението на този оператор ще импортира съдържанието на файла в таблицата:

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

Това работи, като казва на LOAD DATA INFILE, че всеки <row>...</row> е логическа „линия“, която съхранява в локалната променлива @tmp . След това предаваме това на ExtractValue функционират като XML фрагмент и избираме стойностите от него, които искаме, като използваме подходящите 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. Laravel 5.6 withCount и where оператор

  2. Изпълнение на заявката за индексирана булева колона спрямо колона Datetime

  3. WordPress изготвено изявление с условие IN().

  4. mysql like% заявката е бавна с индекс на пълен текст

  5. MySQL INSERT ... ПРИ АКТУАЛИЗИРАНЕ НА ДУБЛИРАН КЛЮЧ на Java:Как да се различават състоянията вмъкнати/актуализирани/без промяна