我正在尝试将sql查询结果导出到csv文件中,但是csv数据看起来并不好看。
MySQL表下载链接: https://www.dropbox.com/s/vtr215bcxqo3wsy/data.sql?dl=0
CSV由sql查询生成:
下载指向原始生成的CSV文件的链接:https://www.dropbox.com/s/fnjf7ycmh08hd22/data.csv?dl=0
我正在使用以下代码:
$query = <<<EOL
SELECT * FROM data ORDER BY FN ASC limit 3
INTO OUTFILE 'folder/data.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
EOL;
$result = mysql_query($query);
为什么csv格式看起来如此奇怪和不可接受? 如果我为其他表尝试相同的代码,那么一切都像魅力一样,那么什么是错的?
答案 0 :(得分:1)
请参阅下面的最终答案
看起来你的行被\\n
终止,它会在随机位置抛出额外的斜杠。
而是尝试双斜杠后跟n(\\n
),看看会发生什么:
$query = <<<EOL
SELECT * FROM data ORDER BY FN ASC limit 3
INTO OUTFILE 'folder/data.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\\n'
EOL;
$result = mysql_query($query);
修改强>
最终答案
另一个观察:我注意到在你的PROP_TYPE字段中,有\ r \ n个字符。有什么方法可以使用REPLACE()
函数在查询中过滤掉它们吗?
我知道您正在寻找基于SQL的解决方案,由于海量数据,这是一个难题。希望这能引导您找到正确的解决方案。
如您所述,使用update data set PROP_TYPE = replace(PROP_TYPE, '"','')
解决了问题。
答案 1 :(得分:1)
考虑简单地使用PHP连接到MySQL,运行查询,然后输出到csv。
<?php
$host="localhost";
$username="user";
$password="password";
$database="dbName";
# open connection
try {
$dbh = new PDO("mysql:host=$host;dbname=$database",$username,$password);
}
catch(PDOException $e) {
echo $e->getMessage();
}
$sql = "SELECT * FROM data ORDER BY FN ASC limit 3;";
$STH = $dbh->query($sql);
$STH->setFetchMode(PDO::FETCH_ASSOC);
while($row = $STH->fetch()) {
# write to csv file
$fs = fopen("folder/data.csv","a");
fputcsv($fs, $row);
fclose($fs);
}
# close connection
$dbh = null;
?>
答案 2 :(得分:1)
最后我解决了我的问题。
实际上@Terry是对的。表中的字段PROP_TYPE存在一些问题。 PROP_TYPE字段在其值中引起问题的双引号。 例如
PROP_TYPE
“价值1”
“价值2”....
首先,我必须使用update data set PROP_TYPE = replace(PROP_TYPE, '"','')
删除额外的双引号,所以现在我的问题已修复。
感谢各位的努力。
我真的很感激。