MySQL作为常用的关系型数据库,经常需要将表数据导出为CSV格式用于数据交换、报表生成等场景,不同的导出方法适用于不同的使用环境和需求,下面介绍几种常见的简单导出方式。

使用SELECT INTO OUTFILE语句导出
这是MySQL内置的原生导出方式,执行效率高,适合在数据库服务器端直接操作。需要注意的是,执行该语句的MySQL用户需要有FILE权限,且导出路径必须是MySQL服务配置中secure_file_priv参数指定的目录,否则会执行失败。
基础语法如下:
-- 导出指定表的数据到CSV文件 SELECT 列1, 列2, 列3 INTO OUTFILE '/var/lib/mysql-files/export_data.csv' CHARACTER SET utf8mb4 -- 设置字符集避免中文乱码 FIELDS TERMINATED BY ',' -- 字段分隔符为逗号 OPTIONALLY ENCLOSED BY '"' -- 字段内容用双引号包裹,可选 ESCAPED BY '\' -- 转义字符为反斜杠 LINES TERMINATED BY 'n' -- 行分隔符为换行符 FROM 目标表名 WHERE 筛选条件; -- 可选,不写则导出全表数据
如果secure_file_priv参数值为NULL,说明禁止导出文件,需要修改MySQL配置文件my.cnf,添加secure_file_priv = "/var/lib/mysql-files/"后重启服务生效。
使用mysqldump工具导出
mysqldump是MySQL自带的备份工具,也可以用来导出CSV格式数据,适合在命令行环境操作,不需要数据库内执行语句,普通用户权限即可使用(前提是能连接数据库)。
导出命令示例如下:
# 导出指定库的指定表为CSV格式 mysqldump -u 用户名 -p --databases 数据库名 --tables 表名 --fields-terminated-by=',' --fields-optionally-enclosed-by='"' --lines-terminated-by='n' --tab=/tmp/csv_export
执行后会提示输入密码,验证通过后会在/tmp/csv_export目录下生成两个文件,一个是表结构文件,一个是CSV数据文件。如果需要指定字符集,可以添加--default-character-set=utf8mb4参数。
使用CSV存储引擎导出
MySQL支持CSV存储引擎,创建表时指定引擎为CSV,表数据会直接以CSV格式存储在磁盘上,适合需要频繁导出CSV的场景。
操作步骤如下:
- 创建CSV引擎的表:
CREATE TABLE csv_export_table (
id INT NOT NULL,
name VARCHAR(50),
age INT,
PRIMARY KEY (id)
) ENGINE=CSV DEFAULT CHARSET=utf8mb4;
- 向表中插入数据后,CSV文件会自动生成在MySQL的数据目录下对应库的文件夹中,文件名和表名一致,后缀为.CSV,直接复制该文件即可使用。
注意CSV存储引擎的表不支持索引,只适合存储少量不需要复杂查询的数据。
使用第三方客户端工具导出
如果使用Navicat、DBeaver等图形化客户端工具,操作会更加简单,不需要记忆命令。以Navicat为例,操作步骤为:连接数据库后选中目标表,右键选择导出向导,选择CSV格式,按照向导提示设置字段分隔符、字符集、导出路径等参数,点击开始即可完成导出。
这种方式适合不熟悉命令行操作的用户,但是导出大量数据时效率会比前两种原生方式低一些。
导出注意事项
- 字符集设置:导出时建议指定utf8mb4字符集,避免中文、特殊符号出现乱码。
- 权限问题:使用SELECT INTO OUTFILE需要确保用户有FILE权限,且导出路径符合secure_file_priv限制。
- 数据转义:如果字段内容中包含逗号、双引号等特殊字符,需要正确设置转义规则,避免CSV格式错乱。
- 大表导出:如果表数据量很大,建议分批次导出,避免占用过多服务器资源。
MySQLCSV导出SELECT_INTO_OUTFILEmysqldumpCSV存储引擎修改时间:2026-06-16 13:30:31