Mysql导出成Excel格式

本文介绍如何使用MySQL命令行及Perl脚本将数据库内容导出为Excel格式文件,并解决中文乱码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

命令行:mysql -u root -ppassw0rd -e "use asteriskcdrdb;select * from cdr limit 0,50;" >>test.xls


Mysql导出成Excel格式
http://zhengcxhx.blog.163.com/blog/static/30174319201052244938916/

Excel 2010-06-22 16:49:38 阅读14 评论0 字号:大中小
这里不讲如何用php到处,只是用mysql的命令和shell结合来导出。。。

方法一:进入到mysql的控制台,输入:

SELECT * INTO OUTFILE './test.xls' FROM tb1 WHERE 1 ORDER BY id DESC LIMIT 0, 50;
这样,应该会在你的mysql的var/目录下产生一个test.xls的文件。。。
但是如果你的shell的登录帐户和mysql的运行账户不同,很可能这个方法就不适用了,因为你可以通过mysql控制台来产生这个文件,但是你却没有 办法通过shell来对这个文件进行操作,因为用户不同,没有访问权限。

这个时候,同事告诉偶滴办法就重装登录了!!!

echo "SELECT * FROM tb1 WHERE 1 ORDER BY id DESC LIMIT 0, 50;"| /usr/local/mysql/bin/mysql -hlocalhost -uroot -pxxxxx > /tmp/test.xls
ok,把你的test.xls文件从tmp下载到本地打开来看看吧。。。
什么?中文乱码?
别着急。。。
因为office默认的是gb2312编码,服务器端生成的很有可能是utf-8编码,这个时候你有两种选择,
1.在服务器端使用iconv来进行编码转换,

iconv -futf8 -tgb2312 -otest2.xls test.xls
如果转换顺利,那么从server上下载下来就可以使用了。
转换如果不顺利,则会提示:iconv: illegal input sequence at position 1841 类似于这样的错误,
先把test.xls下载下来,这个时候文件是utf-8编码的,用excel打开,乱码。
把test.xls以文本方式打开,然后另存为,在编码选择ANSI编码,保存。

ok,再用excel打开,乱码问题,烟消云散。。。


从MySQL导出XLS数据库工具(跨平台)
时间:2006-03-29 00:00来源:中国网管联盟 bitsCN编辑字体:[大 中 小]


这个脚本是使用Perl生成excel xls文件的工具。依赖一些模块,你可以在linux下使用,产生xls文件。使用方式是命令行 参数。非常方便这个脚本是使用Perl生成excel xls文件的工具。依赖一些模块,你可以在linux下使用,产生xls文件。使用方式是命令行 参数。非常方便。
#!/usr/bin/perl
#===============================
# mysql to excel
# lastmodify at 2005-1-5
# copyright by hoowa
#=============================
use strict; #严格语法检测
use DBI; #数据库引擎
use Unicode::Map; #Unicode引擎
#use Spreadsheet::WriteExcel; #Excel报表引擎
use Spreadsheet::WriteExcel::Big; #大文件Excel报表引擎
my $hostname='192.168.1.133';
my $username='user';
my $password='pass';
my $dbname='db';
my $trans_compress=1; #任何非一的数关闭数据库到程序间传输压缩
$|=1;
my @cols=('A:A','B:B','C:C','D:D','E:E','F:F','G:G','H:H','I:I','J:J',
'K:K','L:L','M:M','N:N','O:O','P:P','Q:Q','R:R','S:S','T:T','U:U',
'V:V','W:W','X:X','Y:Y','Z:Z','AA:A','BB:B','CC:C','DD:D','EE:E',
'FF:F','GG:G','HH:H','II:I','JJ:J','KK:K','LL:L','MM:M','NN:N',
'OO:O','PP:P','QQ:Q','RR:R','SS:S','TT:T','UU:U','VV:V','WW:W',
'XX:X','YY:Y','ZZ:Z');
#解析来内容
if ($#ARGV != '1') {
print qq~syntax: my2excel.pl <writefilename> "[where expression]"
~;
exit;
}
$ARGV[1]=~ s//"//g;
warn qq~
mysql to excel
by hoowa.sun
=====================
sql: $ARGV[1]
~;
my $dbh =
DBI->connect("DBI:mysql:mysql_compression=$trans_compress;
database=$dbname;host=$hostname",$username,$password);
my $sth = $dbh->prepare("$ARGV[1]") || die $dbh->errstr;
my $rows = $sth->execute() or die $sth->errstr;
warn "rows: $rows found./n";
my @cols_name = @{$sth->{'NAME'}};
if ($#cols_name > $#cols) {
print "table $ARGV[1] fields out of allow!!(max num. > ".($#cols 1).")/n";
exit;
}
warn "write to: $ARGV[0]/n";
#生成GB2312编码系统
my $map = Unicode::Map->new("gb2312");
#产生报表
my $report = Spreadsheet::WriteExcel::Big->new("$ARGV[0]") || die "不能生成报表文件:$!";
#创建报表的工作表
my $sheet = $report->add_worksheet('data_report');
#创建格式
my $title_style = $report->add_format(); $title_style->set_size(11); $title_style->set_bold(); $title_style->set_align('center');
#初始化数据指针
my $sheet_col = 0;
#创建表格
for (my $i=0;$i<=$#cols_name ;$i ) {
$sheet->set_column($cols[$i], length($cols_name[$i]) 4);
$sheet->write_unicode($sheet_col,$i,$map->to_unicode($cols_name[$i]),$title_style);
}
$sheet->freeze_panes(1, 0);#冻结行
while (my @row = $sth->fetchrow_array) {
$sheet_col ;
for (my $i=0;$i<=$#cols_name ;$i ) {
next if ($row[$i] eq '');
$sheet->write_unicode($sheet_col,$i,$map->to_unicode($row[$i]));
}
}
warn "all done!!!/n";
#结束
END {
$report->close() if ($report);
$dbh->disconnect();
}

Powered by Zoundry Raven

<think>好的,用户想从MySQL导出数据到Excel文件,我需要根据提供的引用资料来整理步骤。首先,引用里提到了几种方法,比如使用SELECT ... INTO OUTFILE命令、Python脚本以及图形界面工具。 先看第一种方法,引用[1]和[5]提到了SELECT ... INTO OUTFILE,这应该是直接通过MySQL命令行导出CSV,然后手动转Excel。需要注意文件路径权限和字符集设置,比如用gbk避免乱码。步骤应该是先执行查询语句,指定分隔符和换行符,然后用Excel打开CSV。 第二种方法是用Python,引用[3]提到用pandas、pymysql和openpyxl库。用户需要安装这些库,连接数据库,执行查询,再用to_excel方法导出。这种方法的优势是可以处理更复杂的数据转换,适合自动化。 第三种是图形界面工具,比如引用[4]提到的导出向导,可能是在phpMyAdmin或者MySQL Workbench里操作,步骤比较简单,适合不熟悉命令行的用户。 用户可能需要详细的步骤说明,所以得把每种方法分点列出,并注意事项。比如权限问题、字符编码、Excel打开CSV的注意事项。还要考虑不同用户的技术水平,提供不同方法的选择。 然后生相关问题,要考虑用户可能的后续问题,比如处理大量数据时的优化、导出其他格式、定时任务等。需要确保问题覆盖常见的使用场景和潜在问题。 最后检查引用是否正确,每个步骤后的引用标记要对应到正确的来源,确保信息准确。同时注意中文回答,避免使用Markdown格式,保持口语化但结构清晰。</think>### 从 MySQL 导出数据到 Excel 的详细方法 #### 方法一:使用 `SELECT ... INTO OUTFILE` 命令(命令行操作) 1. **编写 SQL 查询语句** 通过指定字段分隔符、换行符和字符集生 CSV 文件Excel 可直接打开 CSV): ```sql SELECT * INTO OUTFILE '/tmp/output.csv' CHARACTER SET gbk -- 解决中文乱码问题 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' FROM your_table; ``` - **路径权限**:需确保 MySQL 有权限写入目标路径(如 `/var/lib/mysql-files/`)[^5] - **字符集**:建议使用 `gbk` 或 `utf8mb4` 避免 Excel 中文乱码[^5] 2. **转换 CSV 为 Excel** - 用 Excel 直接打开 CSV 文件 - 保存时选择 `.xlsx` 格式 #### 方法二:使用 Python 脚本(适合自动化) 1. **安装依赖库** ```bash pip install pandas pymysql openpyxl ``` 2. **编写导出脚本** ```python import pandas as pd import pymysql # 连接数据库 conn = pymysql.connect(host='localhost', user='root', password='123456', database='test_db') # 执行查询并导出 sql = "SELECT * FROM your_table" df = pd.read_sql(sql, conn) df.to_excel("output.xlsx", index=False, engine='openpyxl') ``` - **优势**:支持复杂查询和数据处理[^3] - **扩展性**:可添加定时任务自动执行 #### 方法三:使用图形化工具(如 MySQL Workbench) 1. 执行查询后点击 **Export Results** 按钮 2. 选择 `.xlsx` 格式并设置导出路径[^4] 3. 调整编码格式(建议 `gb18030`) #### 注意事项 - **大数据量**:超过 100 万行建议分批次导出 - **特殊字符**:在 CSV 中需用双引号包裹字段 - **日期格式**:导出后需在 Excel 中手动调整格式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值