日常工作中,我们经常需要将Excel中的数据迁移到MySQL数据库中,Excel转CSV是中间关键的过渡步骤。下面我会把从Excel创建、转CSV,再到导入MySQL的全过程拆解开,每个步骤都附具体操作和代码,新手也能跟着做。
一、Excel文件转CSV文件
这一步的核心是把Excel的表格数据,转成MySQL更容易识别的CSV格式,避免数据格式错乱。
1. 新建Excel数据文件
首先创建一个Excel文件student.xlsx,录入需要迁移的数据。以学生成绩表为例,数据结构如下:
| id(学号) | name(姓名) | score(分数) |
|---|---|---|
| 1 | 张三 | 88 |
| 2 | 李四 | 99 |
| 3 | 王五 | 90 |
保存文件时,注意文件名和数据列的对应关系,后续CSV会沿用这个表头。

2. 执行Excel转CSV操作
Excel直接支持转CSV格式,无需额外工具,步骤如下:
- 打开刚才创建的Excel文件;
- 点击顶部「文件」选项卡,选择「另存为」;
- 在弹出的对话框中,选择文件保存路径(建议记下来,后续上传服务器要用);
- 「保存类型」下拉框中,选择「CSV(逗号分隔)(*.csv)」;
- 点击「保存」,完成转换。


3. 处理CSV文件字符集(避坑关键)
如果CSV文件编码不是UTF-8,导入MySQL时可能出现中文乱码。解决方法很简单:
- 用记事本打开转换好的
student.csv; - 点击「文件」-「另存为」,在「编码」下拉框中选择「UTF-8」;
- 覆盖原文件,完成编码调整。

二、CSV文件导入MySQL数据库
这一步需要在MySQL中先准备好表结构,再把CSV数据"灌"进去,全程用命令行操作,清晰且高效。
1. 登录MySQL并开启本地导入权限
首先通过命令行登录MySQL,注意要带--local-infile=1参数,允许本地文件导入:
bash
mysql -uroot -p --local-infile=1
输入密码后登录成功,再执行命令开启全局导入权限(避免后续报错):
sql
set global local_infile = 1;
2. 创建对应的MySQL数据表
先切换到要使用的数据库(这里用martin为例,没有的话先执行create database martin;创建):
sql
use maria;
然后创建和CSV数据匹配的表(表名student_score,字段对应id、name、score):
sql
CREATE TABLE student_score (
id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '学生学号',
name VARCHAR(10) NOT NULL DEFAULT '' COMMENT '姓名',
score SMALLINT UNSIGNED NOT NULL DEFAULT '0' COMMENT '总分',
PRIMARY KEY(id)
) ENGINE = INNODB charset = utf8mb4 COMMENT '学生分数表';
执行后可以用desc student_score;查看表结构,确认字段和类型没错。
3. 上传CSV文件到服务器
如果MySQL在远程服务器上,需要先把本地的student.csv传到服务器(以Linux服务器为例):
-
登录服务器,先进入临时目录
/tmp/(权限足够,不易出错):bashcd /tmp/ -
安装文件传输工具
lrzsz(用于直接拖文件上传):bashyum install -y lrzsz -
输入
rz命令,会弹出本地文件选择框,选中student.csv拖入,完成上传; -
用
ll命令查看,确认文件已在/tmp/目录下。

4. 执行CSV数据导入
核心命令是load data,指定CSV路径、字段分隔符和忽略表头(CSV第一行是表头,不用导入):
sql
load data local infile '/tmp/student.csv'
into table student_score
fields terminated by ',' -- CSV用逗号分隔字段
ignore 1 lines; -- 忽略第一行表头
执行后如果提示"Query OK, 3 rows affected",说明3条数据都导入成功了。

5. 验证导入结果
最后查询表数据,确认导入是否正确:
sql
select * from student_score;
正常会显示以下结果,和Excel中的数据完全一致:
| id | name | score |
|---|---|---|
| 1 | 张三 | 88 |
| 2 | 李四 | 99 |
| 3 | 王五 | 90 |

三、常见问题排查
- 中文乱码 :检查CSV是否为UTF-8编码,MySQL表 charset是否是
utf8mb4; - 导入权限报错 :重新执行
set global local_infile = 1;,并确保登录MySQL时带了--local-infile=1; - 字段不匹配:确认CSV的列数和MySQL表的字段数一致,字段类型(如score是数字)也对应。
如果跟着步骤走,基本能顺利完成从Excel到MySQL的数据迁移,这套流程也适用于其他结构化数据的迁移场景。