我有一个像下面的CSV数据:防止LOAD DATA INFILE
"E12 98003";1085894;"HELLA";"8GS007949261";"";1
"5 3/4"";652493;"HELLA";"9HD140976001";"";1
一些字段包括在双引号。问题是, ,你可能在第二行看到第一列中的数据包含一个双引号在年底为数据的一部分。
我试图沿着线的东西:
LOAD DATA INFILE file.csv
INTO TABLE mytable
FIELDS TERMINATED BY ';' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
,但它会使用引号的数据逃离现场封闭引号。我也试过ESCAPED BY ''
和ESCAPED BY '\\'
没有成功。 有没有办法阻止LOAD DATA INFILE
命令转义双引号? 或者我应该解析csv并且在只有一个时加双引号? 无论如何,我使用powershell解析文件,将编码更改为utf8。有什么方法可以很快解决这个问题吗?我的powershell代码:
function Convert-FileToUTF8 {
param([string]$infile,
[string]$outfile,
[System.Int32]$encodingCode)
$encoding = [System.Text.Encoding]::GetEncoding($encodingCode)
$text = [System.IO.File]::ReadAllText($infile, $encoding)
[System.IO.File]::WriteAllText($outfile, $text)
}
好吧,我做了它使用.NET正则表达式来修复csv。这是昂贵的,但不是太多。 我写
$text = [regex]::Replace($text, "(?m)(?<!^)(?<!\;)""(?!\;)(?!\r?$)", '""');
只是在函数的最后一行之前,它似乎工作确定。由于我是正则表达式的新手,这可能可以改进。
主要的问题是输入数据是无效的CSV格式,因为属于数据的双引号应该加倍(转义)。所以问题就变成了:你从哪里得到这个无效的CSV,你能做些什么来解决它? – trincot
它是从第三方软件中导出的。不幸的是,我无法控制csv是如何创建的。 – pankal