今天遇到一个需求,要从Mysql中查询一部分数据,然后将数据导出为CSV。这里使用的工具是SQLyog,很自然的使用工具自带的导出功能。
导完后,打开csv文件,发现本来1行5列的数据出现了2种异常显示:
1)有的笔记内容,那一列,变成了多列;
2)有的笔记内容,那一行,变成了多行。
关于这两种情况,查了下资料,找到原因:
一列变多列,原因是CSV的列切分是依据英文逗号的,而笔记内容这列可能有的记录是包含一个至多个逗号的,会导致这个列在展示时被分隔;
一行变多行,发现是笔记内容中有了回车换行,导出来直接被换行了。
所以现在的处理方式是,将这两种影响展示的字符给处理掉。于是在查询的SQL中做些处理:
SELECT t.UserId,t.NickName,t.QuestionId,REPLACE(REPLACE(REPLACE(t.Content,',',','),CHAR(13),''),CHAR(10),'') 笔记内容, t.CreateTime
FROM pt_note t
ORDER BY t.CreateTime DESC
LIMIT 0, 1000;其中CHAR(10)是换行,CHAR(13)是回车,顺序和换行完再回车一样。现在导出来就正常了。
本文介绍了一种在从MySQL导出CSV文件时遇到的问题及解决方案。主要问题是由于内容中的逗号和换行符导致的数据列和行出现异常。通过使用SQL语句中的REPLACE函数替换这些特殊字符,成功解决了导出的CSV文件格式问题。
4631





