在powershell脚本上,我在MS Access DB上执行查询并将结果导出到csv文件:
$connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= $mdb"
$command = $connection.CreateCommand()
$command.CommandText = $q
$adapter = New-Object -TypeName System.Data.OleDb.OleDbDataAdapter $command
$dataset = New-Object -TypeName System.Data.DataSet
$nb = $adapter.Fill($dataset)
if ( $nb -lt 1 ){
write-host"empty result !"
"empty" | Out-File -Encoding "UTF8" $exportxt
}
else {
write-host "$nb results !"
$dataset.Tables[0] | export-csv $exportxt -NoTypeInformation -Delimiter ";" -Encoding "UTF8"
}
$connection.Close()
当我在notepad ++中打开此文件时,它会在utf8中正确显示所有字符(我的数据库中有法语单词)。
然后我将此csv上传到服务器并执行一个php页面,使用此查询将其导入mysql数据库:
LOAD DATA LOCAL INFILE '$f'
INTO TABLE mytable
FIELDS TERMINATED BY ';' ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
所有表都在utf8_unicode_ci中,但utf8字符格式不正确(Ã'而不是ô)。
在我的php脚本结束时,我通过电子邮件发送附带csv文件的确认信息,当我收到它时,thunderbird也没有显示字符,但是如果我在notepad ++中打开csv文件,一切都没问题。
似乎CSV文件格式不合适或类似的东西,你怎么看?我错过了ps脚本中export-csv cmdlet的一个选项?
谢谢:)
答案 0 :(得分:0)
我通过在mysql查询中指定utf8字符集解决了这个问题:
LOAD DATA LOCAL INFILE '$f'
INTO TABLE article_temporaire_txt
CHARACTER SET UTF8
FIELDS TERMINATED BY ';' ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
但是为什么thunderbird不能识别文件的UTF8编码?