🚀大模型落地开发实战指南!请关注微信公众号:「AGI启程号」 深入浅出,助你轻松入门!
📚 数据分析、深度学习、大模型与算法的综合进阶,尽在CSDN博客主页


MySQL 数据导入实践(Workbench 向导版 + 常见坑)

场景与目标

  • 源数据:Excel(含中文)
  • 目标:导入到 MySQL 表 stock_quotes
  • 工具:MySQL Workbench(Windows)

一、最终跑通的流程(Workbench 可视化向导)

0)新建数据库(模式)并切换,再建表

在 MySQL 里,“模式(schema)”就等同于“数据库(database)”。
下面两句的含义:

  • CREATE DATABASE ...:创建一个新的数据库/模式(如果不存在就创建)。
  • USE market_data;:把当前会话切换到这个数据库,后续 CREATE TABLEINSERT 等都在这里执行。
-- 1) 新建数据库(= 新建模式)
CREATE DATABASE IF NOT EXISTS market_data
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_0900_ai_ci;

-- 2) 切换到这个数据库
USE market_data;

-- 3) 在该数据库下创建目标表
CREATE TABLE `stock_quotes` (
  `name`       VARCHAR(50)     NOT NULL COMMENT '股票名称,例如:贵州茅台',
  `ts_code`    VARCHAR(9)      NOT NULL COMMENT '交易所代码:如 600519.SH / 000858.SZ',
  `trade_date` DATE            NOT NULL COMMENT '交易日期(YYYY-MM-DD)',
  `open`       DECIMAL(12,3)       NULL COMMENT '开盘价',
  `close`      DECIMAL(12,3)       NULL COMMENT '收盘价',
  `high`       DECIMAL(12,3)       NULL COMMENT '最高价',
  `low`        DECIMAL(12,3)       NULL COMMENT '最低价',
  `vol`        BIGINT UNSIGNED      NULL COMMENT '成交量',
  `code`       CHAR(6)         NOT NULL COMMENT '纯股票代码,保留前导零'
) ENGINE=InnoDB
  DEFAULT CHARSET=utf8mb4
  COLLATE=utf8mb4_0900_ai_ci
  COMMENT='A股日线行情';

如果你已经用 GUI 新建了 schema,也可以只执行 USE 你的库名; 然后创建表。

1)Excel 导出

  • 本次实测可行:另存为 CSV(逗号分隔)(注意:不是“CSV UTF-8(逗号分隔)”)。
  • 列顺序与表一致:name, ts_code, trade_date, open, close, high, low, vol, code
  • code 列在 Excel 设为“文本”,保留前导零

2)Workbench 导入向导
在这里插入图片描述

  • Schemas → 右键库或表 → Table Data Import Wizard

  • 选择 CSV 文件

  • 设置要点:

    • Field Separator:,(逗号)
    • First Row Contains Column Names:勾选
    • Import into an existing table:选择 stock_quotes
  • 检查字段映射顺序 → Next → Import

3)导入后快速校验

SELECT COUNT(*) FROM stock_quotes;
SELECT * FROM stock_quotes ORDER BY trade_date, ts_code LIMIT 10;
SELECT MIN(trade_date), MAX(trade_date) FROM stock_quotes;

二、常见坑与快速排查

1)编码报错:gbk codec can't decode ...

  • 现象:用“CSV UTF-8(逗号分隔)”导入时报错。
  • 解决:改用 “CSV(逗号分隔)” 导出并导入(这次已验证可行)。
    若必须 UTF-8,改用 LOAD DATA ... CHARACTER SET utf8mb4(见“其他导入方式”)。

2)前导零丢失

  • 原因:Excel 把 000858 当数字。
  • 解决:Excel 把 code 列设为“文本”再导出;MySQL 用 CHAR(6)

3)小数/日期格式

  • 小数点必须是英文 .;日期为 YYYY-MM-DD(已预处理则不需转换)。

4)行尾不匹配

  • Windows 多为 \r\n;若用 LOAD DATA 报错,可改 LINES TERMINATED BY '\n'

三、其他导入方式(简要补充)

  1. LOAD DATA LOCAL INFILE(最稳可控编码)
SET GLOBAL local_infile = 1;

LOAD DATA LOCAL INFILE 'C:/data/quotes.csv'
INTO TABLE market_data.stock_quotes
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(name, ts_code, trade_date, `open`, `close`, `high`, `low`, vol, code);
  • 优点:可精确指定编码;大文件更快。
  • 若受 secure_file_priv 限制,优先使用 LOCAL(如上),或把文件放到该变量指定目录。
  1. MySQL for Excel 插件(Windows/Excel)

    • 在 Excel 侧直接把 .xlsx 追加到表或导成新表,列映射友好。
  2. Python(pandas)

    • read_excel() → 清洗 → to_sql(),或先写 CSV 后 LOAD DATA,适合自动化与批处理。

结论

  • 在本次环境(Win + Workbench)中,“CSV(逗号分隔)” + Table Data Import Wizard 是最快捷且已验证可行的路径。
  • 需要可控编码或大规模导入时,优先使用 LOAD DATA LOCAL INFILE ... CHARACTER SET utf8mb4
  • 不想转 CSV 时,可用 MySQL for Excel 插件直接从 .xlsx 导。

补充解答

  • CREATE DATABASE ... 就是创建模式(schema)
  • USE market_data; 是把当前会话切换到这个模式
  • 建表语句应该放在切换到目标模式之后执行,这样表就建在正确的库里了。
Logo

更多推荐