MySQL查询导出数据Excel【转】

情况说明

习惯使用navicat工具了,在navicat里面操作查询,然后导出都很方便
直到今天,查询一个表,一共有105W条数据,然后导出到Excel,速度那叫一个慢。

Linux服务器上导出

主要是用到into outfile '/path'

mysql> SELECT b.station_code,a.* into outfile '/tmp/a.xls' from table1 a JOIN table2 on a.CODE = b.sensor_code WHERE a.mark = 1;
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

提示出错
原因是mysql默认了一个文件路径,我们不能放在别的地方,除非修改了这个参数

查看mysql默认导出文件路径

show variables like '%secure%';

Variable_name Value
require_secure_transport OFF
secure_auth ON
secure_file_priv /var/lib/mysql-files/

 

于是休息into outfile '/path'为into outfile '/var/lib/mysql-files/a.xls'

mysql> SELECT b.station_code,a.* into outfile '/var/lib/mysql-files/a.xls' from hw_data_recvcalibratesend a JOIN hw_station b on a.SNCODE = b.sensor_code WHERE a.CalbrateMark = 1;
Query OK, 1075906 rows affected (7.43 sec)

 

服务器效率还是牛。。。。

修改参数

修改配置可修改mysql配置文件,查看是否有

secure_file_priv =
这样一行内容,如果没有,则手动添加,

secure_file_priv = /home
表示限制为/home文件夹

secure_file_priv =
表示不限制目录,等号一定要有,否则mysql无法启动

带字段名称

使用上面的方法直接导出到xls文档中是不带字段名称的
有的时候会需要显示名称
那么可以用Union all的方法来做

SELECT
'recID', #Excel表头中的字段名
'_id' #Excel表头中的字段名
UNION ALL
SELECT
recID, #查询的数据字段
_id #查询的数据字段
FROM
tableName a #表名
WHERE
a.timeField BETWEEN '2020-11-09 00:00:00'
AND '2020-11-10 13:10:00' INTO OUTFILE '/var/lib/mysql-files/Excel001.xls';

 

中文乱码

CHARACTER SET gbk

 

SELECT b.station_code,a.* into outfile '/var/lib/mysql-files/a.xls' CHARACTER SET gbk from hw_data_recvcalibratesend a JOIN hw_station b on a.SNCODE = b.sensor_code WHERE a.CalbrateMark = 1;

 

MySQL导出数据Excel变成E+15

如标题所示,因为Excel数据格式变成E+15导致查出的数据不准确。上午百度也没搜出好的方法。

想到了一个笨办法,先将文件导成txt,然后用UE列模式在数据前加一列单引号,在黏贴到Excel中


————————————————

转自

版权声明:本文为CSDN博主「再看我把你吃掉」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zz_aiytag/article/details/109307697

参考

mysql数据库表如何导出到excel-木庄网络博客
http://www.muzhuangnet.com/show/44405.html

posted @ 2022-08-31 09:20  paul_hch  阅读(1071)  评论(0编辑  收藏  举报