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