LINUX下从mysql文件导出后标题合并

这两天在做数据导出,真实折磨死了,记录下来。导出的格式是csv。

由于我们的数据量比较大,导出到excel时,几百万上千万行的时候用程序去写入肯定是不行,所以自然就想到了mysql的outfile功能,但是这个方面好像没有导出标题的功能,只能导出数据,然后我就想先导出数据,然后再在linux下将标题插入到文件第一行,思路是没问题,就是到来倒去,标题写进去了,但是放到window下就乱码了。

如果将数据从mysql导出的时候,用utf8格式,在window下就乱码,在linux下显示正常,如果在mysql导出时用gbk,那么在linux下就乱码,真的时候头痛的问题。

我们肯定是要保证在window下用excel打开正常,所以,导出时用gbk。现在问题是如何将标题插入到文件中去并且还能在window下打开。

之前用正常的变量接收插入文件,怎么搞都乱码,后来查到linux有个iconv命令,可以将文件转换为不同的格式,然后想到了一个折中的办法。

就是将标题写入一个临时文件,然后再将文件转换为gbk的格式文件,然后再将转换后的文件内容取出放到一个变量,然后再将变量写入导出的数据文件,问题终于解决。

下面是所有的代码:

mysql导出:注意 

character set gbk
IF(p_pagesize>100000) THEN
    SET @exe_sql = CONCAT('select ',@grid_field,' INTO OUTFILE ''',p_file_name,'.csv'' character set gbk FIELDS TERMINATED BY '','' ENCLOSED BY ''\"'' LINES TERMINATED BY ''\n'' ',@maintable,' ',@jointable,' ',@grid_whr,' ',@sort);
ELSE 
    SET @exe_sql = CONCAT('select ',@grid_field,' INTO OUTFILE ''',p_file_name,'.csv'' character set gbk FIELDS TERMINATED BY '','' ENCLOSED BY ''\"'' LINES TERMINATED BY ''\n'' ',@maintable,' ',@jointable,' ',@grid_whr,' ',@sort, ' LIMIT ', @lmt, ',', `p_pagesize`,' ');
END IF;
-- select @exe_sql;
 PREPARE stmt FROM @exe_sql;
 EXECUTE stmt

linux下合并的代码:

#!/bin/sh
#LANG=latin1
#export LC_ALL=UTF-8
databaseName=$1
fileName=$2
headCol=$3
# sed -i '1i '${headCol} /home/dwgl/test3.csv
#echo ${headCol} > /home/dwgl/out.log
# linux default utf-8 format
echo ${headCol}>/home/dwgl/download/${fileName}_1.csv # UTF-8 format
# from utf-8 convert to gb18030
iconv -f utf-8 -t gb18030 /home/dwgl/download/${fileName}_1.csv > /home/dwgl/download/${fileName}_2.csv
# read first line to variable
headCol2=`sed -n '1p' /home/dwgl/download/${fileName}_2.csv`
# insert format head to outfile
mv /home/mysql/mysql_data/data/${databaseName}/${fileName}.csv /home/dwgl/download/
sed -i '1i '${headCol2} /home/dwgl/download/${fileName}.csv
tar -cvf /home/dwgl/download/${fileName}.tar /home/dwgl/download/${fileName}.csv
gzip /home/dwgl/download/${fileName}.tar
# mv ${fileName}.tar /home/dwgl/download/
rm -f /home/dwgl/download/${fileName}_*.csv

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值