Как правильно загрузить данные кодов символов HTML в базу данных My Sql? - PullRequest
1 голос
/ 11 июня 2019

Я получаю файл данных в ETL от клиента, и мы загружаем данные в базу данных Mysql, используя функциональность Load Data file, и используем CHARACTER SET как utf8.

  LOAD DATA LOCAL INFILE '${filePath}' 
      INTO TABLE test_staging
      CHARACTER SET 'utf8'
      FIELDS TERMINATED BY '|' 
      LINES TERMINATED BY '\n' 
      (${testcolumns}) SET
      first_name = @first_name;

Данные от клиента

1|"test"|"name"|2
2|"asdf"|asdf&test|2
3|fun|value|2

Когда я загружаю вышеуказанные данные в базу данных, и она вставляется непосредственно в виде строк вместо преобразования в символы HTML

Данные базы данных

id   first_name       last_name
1   "test" "name"
2   "asdf" asdf&test
3      fun                value

Я попытался изменить значение CHARACTER SETот utf8 до latin1 , но результат тот же.

Я также пытался заменить специальные символы при загрузке данных в базу данных, но проблема в том, что я получаю все типыHTML символов данных в файле.Я не могу продолжать добавлять функцию замены для всех из них.

  LOAD DATA LOCAL INFILE '${filePath}' 
      INTO TABLE test_staging
      CHARACTER SET 'utf8'
      FIELDS TERMINATED BY '|' 
      LINES TERMINATED BY '\n' 
      (${testcolumns}) SET
      first_name = REPLACE(REPLACE(REPLACE(first_name,''','\''),'"','"'),'&','&');

Существует ли какой-либо набор символов, который преобразует HTML-данные и правильно загружает?

Ожидаемые данные базы данных

id  first_name  last_name
1   "test"       "name"
2   "asdf"       asdf&test
3    fun        value

Любая помощь приветствуется ... Спасибо

1 Ответ

1 голос
/ 11 июня 2019

Проблема, с которой вы сталкиваетесь, не связана с набором символов. Это происходит потому, что программное обеспечение, которое использует ваш клиент, намеренно преобразует специальные символы HTML в их коды.

Возможно, возможно преобразовать их обратно с использованием MySQL, хотя я не смог найти быстрого решения, но, поскольку вы обрабатываете эти данные с помощью ETL, лучшим вариантом, вероятно, будет использование внешнего инструмента до Вы вставляете данные в базу данных. Один из этих , например:

  • cat input-with-specialchars.html | перекодировать html..ascii
  • xmlstarlet unesc
  • perl -MHTML :: Entities -pe 'decode_entities ($ _);'

и т.д.

или что-то еще, в зависимости от того, какие инструменты у вас есть в вашей системе или какие инструменты вы можете себе позволить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...