在日常工作中经常会遇见导出表中的数据到csv文件的操作,这里就简单总结一下导出的操作。

下面对csv文件的描述是摘录:

据RFC4180文档设置的,该文档全称Common Format and MIME Type for Comma-Separated Values (CSV) Files,其中详细描述了CSV格式,其要点包括:

(1)字段之间以逗号分隔,数据行之间以\r\n分隔;

(2)字符串以半角双引号包围,字符串本身的双引号用两个双引号表示。

这里关键点,我们导出的数据文件字段之间应该以逗号分隔,数据行之间应该以\r\n分隔;字段的值之间以半角双引号包围,字段值中的双引号以两个双引号表示。

导出表数据的三种方法:

使用select .... into outfile的方法

直接在mysql的交互界面使用select命令导出数据到文件。

root@newsdb 09:53:08>select * from t_hk_stock_news where news_time > "2018.12.31 23:59:59" into outfile "/db/test.csv";
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

以上报错需要在配置文件中指定secure_file_priv参数的值,这个值指向一个地址,导出的文件需要写入到对应的地址中。

在不知道你个默认的情况下,导出文件中字段之间用TAB键隔开,每行记录之间用\n换行符隔开,

root@newsdb 01:44:05>select * from t_hk_stock_news limit 1 into outfile "/db/test1.csv";
Query OK, 1 row affected (0.00 sec) root@newsdb 01:44:10>
[root@test2 db]# head -n2 test1.csv
000028952-c807-11e7-85f5-00163e12520202 1 NOW.838555 hk03337 安东油田服务(03337.HK)就现有优先票据提交换要约及额外发行票据 2017-11-13 07:35:20000000001 -1 阿思达克 \N \N \N 2017-11-13 07:35:25 15105293425 \N \N 1 2f87c2337-d3d1-11e7-95494-0016233e020202 \N

可以看到对于记录中存储的null的值,导出的时候自动换成来\N的值的形式。

在使用select ... into  outfile导出数据的时候,可以使用如下参数指定其分隔符,以及行与行之间的换行符。

fields terminated by描述字段的分隔符,默认情况下是tab字符(\t)
optionally enclosed by描述的是字段的括起字符。
escaped by描述的转义字符。默认的是反斜杠(backslash:\ )
lines terminated by : 行与行之间的分隔
root@newsdb 01:50:35>select * from t_hk_stock_news limit 3 into outfile "/db/test2.csv" fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by "\r\n";
Query OK, 3 rows affected (0.01 sec)
#数据如下
[root@test2 db]# head test2.csv
"00002752-c807-11e7-85f5-00163e020202",1,"NOW.838555","hk03337","安东油田服务(03337.HK)就现有优先票据提交换要约及额外发行票据","2017-11-13 07:35:25",1,0000000001,-1,"阿思达克","N,"N,"N,"2017-11-13 07:35:25",1510529725,"N,"N,1,"2f87c978-d3d1-11e7-9394-00163e020202","N,"2017-11-28 08:15:06"
"0000327bac35ba504d621e1140f2f775",1,"NOW.909884","hk00700","《瑞信窝轮》腾讯升逾2%撑大市美团续挫,留意腾讯购13570 / 沽15322/美团购14369 /沽14698","2018-11-26 14:07:39",1,0000000001,-1,"阿思达克","N,"N,"N,"2018-11-26 14:07:39",1543212459,"N,"N,1,"ea7916c91c037af7054f775998eda559","N,"2018-11-27 14:35:10"
"0000327bac35ba504d621e1140f2f775",1,"NOW.909884","hk01810","《瑞信窝轮》腾讯升逾2%撑大市美团续挫,留意腾讯购13570 / 沽15322/美团购14369 /沽14698","2018-11-26 14:07:39",1,0000000001,-1,"阿思达克","N,"N,"N,"2018-11-26 14:07:39",1543212459,"N,"N,1,"ea7916c91c037af7054f775998eda559","N,"2018-11-27 14:35:10"
[root@test2 db]#

null值转换成/N的值,不知道为何只用半个双引号,另外这个文件若用excel打开会出现乱码的现象;可以在导出的时候指定字符集。

root@newsdb 01:56:01>select * from t_hk_stock_news limit 3 into outfile "/db/test2.csv" character set gbk fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by "\r\n";
Query OK, 3 rows affected (0.00 sec)

上面加入了指定字符集的语句,但是在excel打开的时候会出现串格的问题,多个字段显示在同一个单元格中,特别数据库中存储的null值,在这里转换为\N值时,会出现多个值显示在一个单元格中的问题。

上面导出的数据并不包含每个字段的名字。

使用mysql命令导出数据

利用mysql的-e参数,可以导出数据,最重要的是我们可以对导出的数据进行正则处理。

如下利用mysql命令导出数据到csv文件,并且把表中的null值在excel中显示为空。

[root@test2 ~]# mysql -e "set names gbk;select * from newsdb.t_hk_stock_news where news_time > '2019-03-31 23:59:59' limit 5" |sed -e  "s/\t/,/g" -e "s/NULL/  /g" -e "s/\n/\r\n/g" > /db/test.csv

#在-e参数中实际使用了两条命令,一条是设置字符集,另一条是select语句,通过管道把每一行数据都通过正则来处理。
#正则中把字段之间的TAB键换为“,”,然后把字段值中的null替换为空字符

上面的文件内容如下:【因为字符集的问题所以产生了乱码,但是可以看到每个字段已经导了出来】

[root@test2 db]# head -n5  test.csv
news_id,src_type,src_id,symbol,title,news_time,content_type,news_type,is_valid,origin,author,url,website,create_time,news_t,edit_desc,news_md5,is_repeat,repeat_id,img_url,update_time
009c7c4cdf3878289c25b6f88267cb2b,3,6f8d47cf17c1bbada470ea63bc34eba4,hk01363,א͏»·±£(01363)4Ղ1ɕͣƆ ԭӲδ֪,2019-04-01 00:00:00,5, ,-1,ׇͨ²ƾ­, , , ,2019-04-01 09:55:02,1554048000, , ,1,2c9c348790f944d39d32838b4cff1e87, ,2019-04-01 21:16:22
0129b1dfb971aafec131f6f92c862aa9,3,d816360899e4f0049eabbac7e7cb54cb,hk01755,т³Ȕh01755)£ºϷ²ِ³Ȕď

mysql导出数据到csv文件的更多相关文章

  1. mysql 导出数据到csv文件的命令

    1.导出本地数据库数据到本地文件 mysql -A service_db -h your_host -utest -ptest mysql> select * from t_apps where ...

  2. PHP导出数据到CSV文件函数 csv_export()

    后台往往需要导出各种数据到 Excel文档中.通常我们是导出 .csv文件格式,PHP导出函数参考代码如下: /** * 导出数据到CSV文件 * * @param array $data 二维数组( ...

  3. PHP导出数据到CSV文件函数/方法

    如果不清楚什么是CSV文件,可看如下文章介绍  CSV格式的是什么文件?CSV是什么的缩写? /** * 导出数据到CSV文件 * @param array $data 数据 * @param arr ...

  4. PHP导出数据到CSV文件

    后台往往需要导出各种数据到 Excel文档中.通常我们是导出 .csv文件格式,PHP导出函数参考代码如下: /** * 导出数据到CSV文件 * * @param array $data 二维数组( ...

  5. mysql导出数据至指定文件的命令

    根据查询语句,导出数据至指定文件SELECT name INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY '-|-' OPTIONALLY ENC ...

  6. Mysql导出逗号分隔的csv文件

    CleverCode在实际的工作中.常常须要将一些报表.或者日志数据等导出来,假设直接做页面,假设次数也不是非常多,需求也不同.所以直接导出csv文件,更加直观. 1 导出csv文件 1.1 语句格式 ...

  7. 【shell mysql 导出数据到csv脚本,完美解决乱码转义符等问题】-费元星

    #!/bin/bash#@author:feiyuanxing [既然笨到家,就要努力到家]#@date:2017-12-05#@E-Mail:feiyuanxing@gmail.com#@TARGE ...

  8. 从数据库中导出数据到.csv文件

    考虑到csv文件比xls文件格式容易控制,所以在这次导出中用的是.csv格式. protected function exportInfo($arr, &$err){ $nameInfo = ...

  9. MySQL导出数据时提示文件损坏

    使用Navicat工具,优先将整个数据库的表和数据导出. 如果遇到文件损坏错误可以在表实例界面选中所有表,然后将表转储为SQL文件(结构和数据). 在目标数据库执行导出的SQL文件,导入结构和数据. ...

随机推荐

  1. Apache2.4+PHP7.2环境搭建

    Editplus生成码:http://www.jb51.net/tools/editplus/ 阿帕奇下载地址:https://www.apachehaus.com/cgi-bin/download. ...

  2. 【tensorflow使用笔记三】:tensorflow tutorial中的源码阅读

    https://blog.csdn.net/victoriaw/article/details/61195620#t0 input_data 没用的另一种解决方法:tensorflow1.8版本及以上 ...

  3. vue-element-template模板项目使用记录(持续更新)

    1. npm 使用注意事项: a. node.js 使用 v8.16.0 版本,使用 v10 版本会有各种莫名其妙的报错 b. 开箱先改淘宝镜像: npm config set registry ht ...

  4. Mac开机自动运行shell脚本

    1.首先写一个sh脚本,比如: cd ~/Documents mkdir haha 代码很简单,进入Documents文件夹,建立haha目录,保存为run.sh 2.修改run.sh权限 sudo ...

  5. [USACO 2008 Jan. Silver]架设电话线 —— 最短路+二分

    一道图论的最短路题.一开始连最短路都没想到,可能是做的题太少了吧,完全没有思路. 题目大意: FJ的农场周围分布着N根电话线杆,任意两根电话线杆间都没有电话线相连.一共P对电话线杆间可以拉电话线,第i ...

  6. REACT--》fetch---基本使用

    [WangQI]---fetch---基本使用   一.fetch fetch是一种XMLHttpRequest的一种替代方案,在工作当中除了用ajax获取后台数据外我们还可以使用fetch.axio ...

  7. 红黑树插入操作---以JDK 源码为例

    红黑树遵循的条件: 1.根节点为黑色. 2.外部节点(叶子节点)为黑色. 3.红色节点的孩子节点为黑色.(由此,红色节点的父节点也必为黑色) 4.从根节点到任一外部节点的路径上,黑节点的数量相同. 节 ...

  8. Web API 入门三(参数绑定)

    学到现在,感觉到微软的.NET各种框架和模型基础大致都差不多,所以,这部分内容大致和MVC部分差不多.在学习参事绑定之前,我们肯定要知道Controller(即控制器)是啥干啥的. 其实,Contro ...

  9. Redis基础都不会,好意思出去面试?

    作者:张君鸿 juejin.im/post/5d078cd6f265da1b8466e62c Redis的数据结构 Redis支持多种不同的数据结构,包括5种基础数据结构和几种比较复杂的数据,这些数据 ...

  10. 《A chorus section detection method for musical audio signals and its application to a music listening section》

    Abstract: 重复的副歌识别对音乐理解的计算模型(computational model)至关重要,应用层面有:音乐副歌识别预览,音乐检索等. 传统检测的难点:变调,起始点和结束点(both e ...