如何将HTML字符代码数据正确加载到My Sql数据库中?

时间:2019-06-11 06:46:41

标签: mysql database

我从客户端收到ETL中的数据文件,并使用“加载数据”文件功能将数据加载到Mysql数据库中,并使用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 个答案:

答案 0 :(得分:1)

您面临的问题与字符集无关。发生这种情况的原因是客户使用的软件故意将HTML特殊字符转换为他们的代码。

虽然我找不到快速解决方案,但有可能使用MySQL将其转换回去,但是当您使用ETL处理此数据时,更好的选择似乎是使用外部工具之前将数据插入数据库。以One of these为例:

  • cat input-with-specialchars.html |重新编码html..ascii
  • xmlstarlet unesc
  • perl -MHTML :: Entities -pe'decode_entities($ _);'

或其他取决于您系统中可用的工具或可以负担得起安装的工具。