MySQL 数据导入实践(Workbench 向导版 + 常见坑)
🚀大模型落地开发实战指南!深入浅出,助你轻松入门!📚 数据分析、深度学习、大模型与算法的综合进阶,尽在CSDN。
·
🚀大模型落地开发实战指南!请关注微信公众号:「AGI启程号」 深入浅出,助你轻松入门!
📚 数据分析、深度学习、大模型与算法的综合进阶,尽在CSDN博客主页
目录
MySQL 数据导入实践(Workbench 向导版 + 常见坑)
场景与目标
- 源数据:Excel(含中文)
- 目标:导入到 MySQL 表
stock_quotes - 工具:MySQL Workbench(Windows)
一、最终跑通的流程(Workbench 可视化向导)
0)新建数据库(模式)并切换,再建表
在 MySQL 里,“模式(schema)”就等同于“数据库(database)”。
下面两句的含义:
CREATE DATABASE ...:创建一个新的数据库/模式(如果不存在就创建)。USE market_data;:把当前会话切换到这个数据库,后续CREATE TABLE、INSERT等都在这里执行。
-- 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
- Field Separator:
-
检查字段映射顺序 → 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'。
三、其他导入方式(简要补充)
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(如上),或把文件放到该变量指定目录。
-
MySQL for Excel 插件(Windows/Excel)
- 在 Excel 侧直接把
.xlsx追加到表或导成新表,列映射友好。
- 在 Excel 侧直接把
-
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;是把当前会话切换到这个模式;- 建表语句应该放在切换到目标模式之后执行,这样表就建在正确的库里了。
更多推荐
所有评论(0)