这两天在做数据导出,真实折磨死了,记录下来。导出的格式是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-
databaseName=$
fileName=$
headCol=$
# sed -i '1i '${headCol} /home/dwgl/test3.csv
#echo ${headCol} > /home/dwgl/out.log
# linux default utf- format
echo ${headCol}>/home/dwgl/download/${fileName}_1.csv # UTF- format
# from utf- convert to gb18030
iconv -f utf- -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

LINUX下从mysql文件导出后标题合并的更多相关文章

  1. linux下修改mysql数据库编码后无法启动解决办法

    linux下老版本的Mysql修改数据库编码的方法是 修改my.cnf vi /etc/my.cnf 在[client]下添加 default-character-set=utf8 在[mysqld] ...

  2. windows下数据库文件使用脚本同步到linux下的mysql数据库中

    1.背景 windows server 2008 下 每天会有 *.sql数据文件 需要上传到linux 中的mysql数据库中 而运维人员是在 windows server 下使用 xshell 连 ...

  3. Linux下忘记MySQL密码的解决方法和输入mysqld_safe --skip-grant-tables &后无法进入MySQL的解决方法

    在Linux下忘记MySQL密码后我们可以通过一个mysql的参数--skip-grant-tables &轻松解决这个问题 亲测在CentOS有效 其中 --skip-grant-table ...

  4. (转)Mysql数据库之Binlog日志使用总结Linux下用户组、文件权限详解

    Linux下用户组.文件权限详解 原文:http://blog.csdn.net/sdulibh/article/details/51566772 用户组 在linux中的每个用户必须属于一个组,不能 ...

  5. [转帖]Linux下inotify监控文件夹状态,发生变化后触发rsync同步

    Linux下inotify监控文件夹状态,发生变化后触发rsync同步 https://www.cnblogs.com/fjping0606/p/6114123.html 1.安装工具--inotif ...

  6. linux下安装mysql后 sql区分大小写

    Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:1.用root登录,修改 /etc/my.cnf:2.在[mysqld]节点下,加入一行: lower_ ...

  7. Linux下安装mysql(1)(CentOS)

    标题是(1)也就是说这次是基础安装,这种方式安装,没有组的创建,权限管理,配置文件更改等,仅仅是最基本的安装,适合第一次在linux上安装mysql的新手 1.准备好安装包(Linux-Generic ...

  8. Linux下安装mysql教程

    Linux下安装mysql  MySQL官网:https://dev.mysql.com/downloads/mysql/ 到mysql官网下载mysql编译好的二进制安装包,在下载页面Select ...

  9. LR通过snmp监控linux下的mysql

    LR通过snmp监控linux下的mysql 在linux底下安装配置snmp: 1.使用系统盘安装rpm包(这种方式最好) 2.在www.net-snmp.org处下载net-snmp安装(安装后有 ...

随机推荐

  1. Spring MVC4 + Spring Security4 + Hibernate实例

    http://www.yiibai.com/spring-security/spring-mvc-4-and-spring-security-4-integration-example.html 在这 ...

  2. list-列表练习

    #list列表取值更方便灵活 列表.数组说的都是1个东西#列表中每个字符都有一个编号,就是我们说的下标,从0开始#如果你输入的下标在列表中不存在,会报下标越界的错误 1.查询user表中下标为0的记录 ...

  3. selenium3 文件系列之------ opencsv读取csv文件

    最近在学习selenium有关文件的读取测试,今天先总结一下如何读取csv文件.CSV的定义是与逗号分隔的值(Comma-Separated Values),在Java中需要用到第三方lib去处理读取 ...

  4. poj1064 Cable master(二分查找,精度)

    https://vjudge.net/problem/POJ-1064 二分就相当于不停地折半试. C++AC,G++WA不知为何,有人说C函数ans那里爆int了,改了之后也没什么用. #inclu ...

  5. Sqoop找不到主类 Error: Could not find or load main class org.apache.sqoop.Sqoop

    最近由于要使用Sqoop来到出数据到hdfs,可是发现Sqoop1.4.5跟hadoop2.X不兼容,需要对Sqoop1.4.5进行编译,编译的具体方法见:http://my.codeweblog.c ...

  6. securecrt通过ssh连接板子: 密钥交换失败,没有兼容的加密程序

    在用securecrt连接板子时遇到如下问题: 需要修改板子上的/etc/ssh/ssh_config和/etc/ssh/sshd_config. 修改/etc/ssh/ssh_config,取消下面 ...

  7. OKDownload 下载框架 断点续传 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. 基于Clang的缓存型C++编译器Zapcc

    http://www.infoq.com/cn/news/2018/06/zapcc-caching-cpp-compiler-open https://blog.csdn.net/joy0921/a ...

  9. 一个简单的开源PHP爬虫框架『Phpfetcher』

    这篇文章首发在吹水小镇:http://blog.reetsee.com/archives/366 要在手机或者电脑看到更好的图片或代码欢迎到博文原地址.也欢迎到博文原地址批评指正. 转载请注明: 吹水 ...

  10. 【打印】windows打印控件,Lodop.js介绍

    1.Lodop.js这插件很强大,目前仅支持windows系统 2.使用原生javascript编写 3.lodop支持客户端安装,c-lodop支持服务器端安装 4.无论客户端还是服务器端,都必须是 ...