我从客户端收到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
感谢您的帮助...谢谢
答案 0 :(得分:1)
您面临的问题与字符集无关。发生这种情况的原因是客户使用的软件故意将HTML特殊字符转换为他们的代码。
虽然我找不到快速解决方案,但有可能使用MySQL将其转换回去,但是当您使用ETL处理此数据时,更好的选择似乎是使用外部工具之前将数据插入数据库。以One of these为例:
等
或其他取决于您系统中可用的工具或可以负担得起安装的工具。