诺亚方舟

沉淀

解决MySql导出CSV文件显示异常问题

问题描述:导数据的时候经常会遇到这样子的问题,导出的csv文件用excel打开时,长位的数字字符串会被显示为科学计数法,或者字符串太长时显示成#########,这给预览者带来了很大的不便。

如何解决这些类似的问题?思路其实很简单,只要给数字字符串加上非数字字符,excel显示的时候就不会自动转换了。做法是在导出的sql语句里面加上enclosed by ‘\t’,这样子在每个字段前后都会加上制表符,在excel中打开的时候就不会出现缩略显示或者长数字字符串变为科学计数法的问题了。

例子:

1
select b.billing_no,b.username,c.exchange_money,c.billing_finish from test.ahqj4s_order_log as a left join otg.o_app_receipt as b on a.receipt_md5 = b.receipt_md5 left join otg.o_exchange_billing as c on b.billing_no = c.billing_no order by c.billing_finish into outfile '/tmp/ahqjs4_resend_orders7.csv' fields terminated by ','  enclosed by '\t' ;

注意一点,如果是加上optionally enclosed by ‘\t’,那这个语法会有智能判断,只对字符串类型字段前后加上\t,想强制对某一列数字字段加制表符,可以在select出来的时候加上CONVERT(xxx,CHAR),这样这一列显示出来就会带上制表符。

=============================2018-02-07===============================

补充一种导出数据异常的情况,当我们在数据库导出数字字符串数据(例如订单号)超过15个字符时,excel会恶心的把后面的数字变为0,如何避免这种恶心的情况,答案也很简单,在select的时候对需要处理的字段前面加上’单引号就可以了。例如:

1
select concat("'",order_id),user_name from hd_wx_redpack_log;

最后附上一篇mysql转换类型的文章:

mysql最常见的类型转换

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>